Qt Cursor

来源:互联网 发布:xampp配置mysql端口 编辑:程序博客网 时间:2024/06/05 20:55
Qt应用程序Cursor样式
        在X11上,Qt支持Xcursor库,可以随意更改全彩色的Cursor主题。但是在嵌入式Qt开发中,没有Xcursor的支持,效果就没这么乐观。
        总结一下,我们可以通过以下三类方式修改Qt应用程序的Cursor样式:

1. Qt::CursorShape 

      Qt提供以下CursorShape,如下图:
     
代码:

  1.    Widget::Widget(QWidget *parent) :  
  2.     QWidget(parent),  
  3.     ui(new Ui::Widget)  
  4. {  
  5.     ui->setupUi(this);  
  6.     setCursor(QCursor(Qt::OpenHandCursor));  
  7. }  

效果图:



    对于桌面应用程序开发,系统主题可替代Qt::CursorShape的Cursor样式,比如,当我使用Qt::WaitCursor,程序运行在UBuntu时的样式为:

    
     对于常用嵌入式开发组合Qt-embedded+linux+arm来说,正如Qt::CursorShape原样。
   

2.QPixmap or QBitmap

代码:

  1. Widget::Widget(QWidget *parent) :  
  2.     QWidget(parent),  
  3.     ui(new Ui::Widget)  
  4. {  
  5.     ui->setupUi(this);  
  6.     QCursor cursor ;  
  7.     QPixmap pixmap("cursor.png") ;  
  8.     cursor = QCursor(pixmap,-1,-1);  
  9.     setCursor(cursor) ;  
  10. }  


   对于桌面应用程序开发,可实现全彩色的自定义Cursor,如图:

  
   对于常用嵌入式开发组合Qt-embedded+linux+arm来说,如果使用QWS来启动应用程序,则好好的会变成了。只认识黑白2值,没办法……色盲……


3. x pixmap (xpm)

代码:

  1. static const char *const cursor_xpm[] = {  
  2.     "15 15 3 1",  
  3.     "   c None",  
  4.     ".  c #0000aa",   //.的颜色  
  5.     "*  c #aa0000",   //*的颜色  
  6.     "     .....     ",  
  7.     "   ..*****..   ",  
  8.     "  .   ***   .  ",  
  9.     " .    ***    . ",  
  10.     " .    ***    . ",  
  11.     ".     ***     .",  
  12.     ".    *****    .",  
  13.     ".*************.",  
  14.     ".    *****    .",  
  15.     ".     ***     .",  
  16.     " .    ***    . ",  
  17.     " .    ***    . ",  
  18.     "  .   ***   .  ",  
  19.     "   ..*****..   ",  
  20.     "     .....     "  
  21. };  
  22.   
  23.   
  24. Widget::Widget(QWidget *parent) :  
  25.     QWidget(parent),  
  26.     ui(new Ui::Widget)  
  27. {  
  28.     ui->setupUi(this);  
  29.     QCursor myCursor(cursor_xpm);  
  30.     setCursor(myCursor);  
  31. }  


   从cursor_xpm[]形状可以清晰的看到样式效果,如图:


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

  也许你会有这样一个疑问,为何不直接用QPixmap貼原图片,何必转成xpm?我想说,多知道一些途径不是坏事,对你不实用可以不用,当然,xpm绝对有它的用武之地,和它不可磨灭的意义……

1. 应用在QVTKWidget中示例:qvtkwidget->setCursor(Qt::CursorShape);  或直接在QtDesigner上选择cursor类型;
2. m_pImageViewer2->GetRenderWindow()->SetCurrentCursor(VTK_CURSOR_cross-hair);
3. 使用vtkImagePlaneWidget类中的SetCursorProperty(vtkProperty*); 这个我自己没有测试过
0 0
原创粉丝点击