Qt 光標樣式

 在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下也有不少轉換軟件和工具,可以完成一鍵轉換。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章