当前位置:   article > 正文

QT程序全屏显示及消除鼠标指针_qwidget grab()截图去除鼠标

qwidget grab()截图去除鼠标

https://blog.csdn.net/yu5611789/article/details/7569744

一、 技术资料

1. QT中全屏显示子窗口的方法:

QT中窗口部件QWidget成员函数showFullScreen();是用于将窗口部件全屏显示,但是他只对窗口模式的部件有用。子窗口的特征是 Qt::SubWindow,不是独立的窗口。因此对其调用showFullScreen()无效。通过对对子窗口调 用:setWindowFlags(Qt::Dialog);或setWindowFlags(Qt::Window);将其设为窗口模式后,即可调用 showFullScreen();进行全屏显示了。

QT中,直接使用move和resize对窗口定位是没有效果的。需要先将子窗口设位非窗口模式。之后再将窗口移到理想位置。即先调用setWindowFlags(Qt::Dialog);或者setWindowFlags(Qt::SubWindow);在调用move和resize函数。

有人提到退出全屏时,调用showNormal(),再调setWindowFlags(Qt::SubWindow)。

这有两个问题:1)showNormal()也是只对顶级窗口有效。2)可以考虑先调用showNormal()将窗口设为原来大小,在将窗口设为子窗口模式。但这样窗口回到父窗口之中也不会显示原来的大小

总结方法有2个:

方法1:使用函数setWindowFlags()函数

例:this->setWindowFlags(Qt::window | Qt::FramelessWindowHint); 

(第一个Qt::window表示此widget是窗口类型,第二个参数使用无框架就是没有标题,状态栏和边框)

方法2:使用showFullScreen()函数

例:在窗口对象中加入this->showFullScreen();即可,此方法只对顶级窗口有效。 

2. QT触摸屏隐藏鼠标指针

方法1:运行加参数-nomouse

鼠标指针是没了,触摸屏也失效了。

方法2:QWidget::setCursor(QCursor(Qt::BlankCursor)

例:this->setCursor(Qt::BlankCurror);

只希望在某个QWidget(或QDialog等)控件上不出现鼠标指针。其他窗口仍会显示鼠标指针。

方法3:main函数中调用QApplication::setOverrideCursor(Qt::BlankCurror);

方法4:main()函数加入 #include <QWSServer>,实例化QApplication后,添加QWSServer::setCursorVisible(false);

注意:方法2和3只有在动一下触摸屏后鼠标才会消失,第4种在整个程序启动到运行都不会出现鼠标指针。

二、 实现过程

1. QT测试程序的全屏显示使用方法2:使用showFullScreen()函数

而为了在PC机上模拟程序的运行显示情况,故在调试时屏蔽在每个子窗口中都添加以下代码showFullScreen()函数,改为在每个窗口函数中添加以下代码:

This->setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint);//消除系统标题栏

resize(800, 600);//窗口大小为800*600

2.QT测试程序消除鼠标指针使用方法4:main()函数加入 #include <QWSServer>,实例化QApplication后,添加QWSServer::setCursorVisible(false);

但再添加到main()函数中后在QT-x11环境中编译出现以下错误:

main.o: In function `main':

main.cpp:(.text+0x35): undefined reference to `QWSServer::setCursorVisible(bool)'

collect2: ld returned 1 exit status

make: *** [picture] 错误 1

查找资料:

QT Embeded应用没有来严格的区分server和client进程,如果一个QT进程的启动参数中有-qws,那么这个进程就具有server胡管理功能,被称为QWS server,当然这个进程同样可以和其它的QT进程一样可以创建并显示widget,只有兼做server的功能而已。 

这个所谓的server功能主要是由QWSServer对象来实现的。 

QWSServer的初始化是在QApplication的初始化过程中完成的,具体的流程如下: QApplication::construct-->qt_init-->QWSServer::startup QWSServer::startup是一个static函数,创建全局对象qwsServer.QWSServer的构造函数会依次初始化所管理的对象。

因此QWSServer是一个实现QT Embeded的server功能的类,我们在编译成X11版本的qt程序时才会提示“undefined reference to `QWSServer::setCursorVisible(bool)'”,重新使用QT-Embedded版本编译数码相框程序,编译通过,移植到板子上成功实现全屏显示以及消除鼠标指针。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/95123
推荐阅读
相关标签
  

闽ICP备14008679号