1. 程式人生 > >linux qt 隱藏滑鼠 熱拔插 USB 滑鼠 指標 【轉】

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

網上搜索“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啟動時也不會顯示滑鼠指標),

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

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