linux qt 隱藏鼠標 熱拔插 USB 鼠標 指針 【轉】

 

原文地址

linux qt 隱藏鼠標 熱拔插 USB 鼠標 指針

7人閱讀 評論(0)收藏 舉報

網上搜索“qt 隱藏鼠標”,大概有以下幾種方法,總結一下:

1.編譯Qt庫的時候添加編譯選項QT_NO_CURSOR,這樣cursor相關的代碼統統不會被編譯進去,自然鼠標光標也不會出現在程序中。

這樣是徹底不能使用鼠標了,很不方便調試,產品開發階段、維護,使用鼠標可帶來極大方便。

所以此方法只適合簡單界面應用,根本不需要鼠標產品。


2.只希望在某個QWidget下不出現鼠標光標,則只要對這個widget調用

QWidget::setCursor(QCursor(Qt::BlankCursor)),其它的窗口仍將出現鼠標。
 
在main函數中,實例化了APPLICATION後,調用
QApplication::setOverrideCursor(Qt::BlankCursor);

任一控件下顯示與關閉鼠標
this->setCursor(Qt::BlankCursor);   //隱藏鼠標
this->setCursor(Qt::ArrowCursor);  //顯示正常鼠標
this改爲需要隱藏鼠標的部件,就可以令當鼠標移動到該部件時候,效果生效。

調用下面函數
QWSServer::setCursorVisible(false);

在運行時候加個參數就輕鬆搞定 ./program -qws -nomouse

我試好像都不行,而且開機qt啓動時鼠標仍然再,不爽。

3.移動鼠標到屏幕右下角(看不見),簡單實用,但是需要修改qt庫,目前還沒有找到更好的方法:

講一下爲什麼要隱藏鼠標:做爲一般產品很少使用鼠標,都會用小鍵盤或觸摸屏代替,但是做爲調試,維護使用鼠標比其它方式更爲方便,

在產品發佈時,本身產品沒有鼠標,但是qt加入鼠標支持後會在屏幕中心畫一個鼠標指針(不管有沒有接鼠標),極大的影響了界面美觀,所以在沒有鼠標時,

不顯示鼠標,接上鼠標後顯示鼠標。


現在有了思路:鼠標是qt去畫出來的,在啓動qt時通過環境變量export QWS_MOUSE_PROTO="TPanel:/dev/input/event0 USB:/dev/input/mice",

傳入了鼠標設備文件(觸摸屏,鼠標USB:/dev/input/mice),qt會實時讀取此設備文件,獲取相關事件再處理並不斷的重畫鼠標。


通過看qt源碼,設置隱藏鼠標,其實也是畫一個空鼠標指針:

    if ( !haveviscurs || !curs )
    curs = QWSCursor::systemCursor(BlankCursor);

如果通過隱藏鼠標的方法去實現改動的地方比較多,更爲簡單的辦法是:

找到qt2/src/kernel/qwscursor_qws.cpp文件initializeCursor函數替換藍色部分:

void QWSServer::initializeCursor()
{
    // setup system cursors
#ifndef QT_NO_QWS_CURSOR
//    qt_screen->initCursor(sharedram + ramlen,TRUE);

    // default cursor
    cursor = 0;
    setCursor(QWSCursor::systemCursor(ArrowCursor));
#endif
#if 0//modify by lxj 2011.08.11
    setMouse(QPoint(swidth/2, sheight/2), 0);
#else
    setMouse(QPoint(swidth, sheight), 0);
#endif
}


初始化時將鼠標移動到屏幕右下角,看不見,這樣不管有沒有鼠標,都不顯示鼠標指針(qt啓動時也不會顯示鼠標指針),

當接上鼠標時,移動一下,鼠標指針就出來了。

當然如果是想支持熱拔插自動隱藏鼠標,還得想另外的辦法。目前這樣已經可以接受了。

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