网上搜索“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启动时也不会显示鼠标指针),
当接上鼠标时,移动一下,鼠标指针就出来了。
当然如果是想支持热拔插自动隐藏鼠标,还得想另外的办法。目前这样已经可以接受了。