Qt中绘制光标样式


在Qt中,想要实现当鼠标按下时,显示一个自己定义的图标,可以做到么?

QT

黑鸡·get! 12 years, 4 months ago

鼠标样式完全可以自定义的,对于 QWidget ,可以调用 setCursor(QCursor cursor) 来重新设置鼠标样式。
我们可以通过以下三类方式修改Qt应用程序的Cursor样式:
1. Qt::CursorShape
Qt提供以下CursorShape,如下图:

请输入图片描述

   
  Widget::Widget(QWidget *parent) :
  
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
setCursor(QCursor(Qt::OpenHandCursor));
}

2.QPixmap or QBitmap

   
  Widget::Widget(QWidget *parent) :
  
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QCursor cursor ;
QPixmap pixmap("cursor.png") ;
cursor = QCursor(pixmap,-1,-1);
setCursor(cursor) ;
}

3. x pixmap (xpm)

   
  static const char *const cursor_xpm[] = {
  
"15 15 3 1",
" c None",
". c #0000aa", //.的颜色
"* c #aa0000", //*的颜色
" ..... ",
" ..*****.. ",
" . *** . ",
" . *** . ",
" . *** . ",
". *** .",
". ***** .",
".*************.",
". ***** .",
". *** .",
" . *** . ",
" . *** . ",
" . *** . ",
" ..*****.. ",
" ..... "
};


Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QCursor myCursor(cursor_xpm);
setCursor(myCursor);
}

其实xpm的方式和pixmap原理相同,Linux下我们可以轻松通过命令转换图片格式,如png转xpm:
convert 1.png xpm:2.xpm
Windows下也有不少转换软件和工具,可以完成一键转换。

jimpos answered 12 years, 4 months ago

Your Answer