分享

linux qt 隐藏鼠标 热拔插 USB 鼠标 指针

 若渴若愚 2012-07-19

http://blog.csdn.net/lxj_com2006/article/details/6678390

网上搜索“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启动时也不会显示鼠标指针),

当接上鼠标时,移动一下,鼠标指针就出来了。

当然如果是想支持热拔插自动隐藏鼠标,还得想另外的办法。目前这样已经可以接受了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多