在处理嵌入式QT程序全屏显示及消除鼠标指针的过程中,首先需要了解QT中全屏显示子窗口的几种方法。QT提供了QWidset成员函数showFullScreen()用于全屏显示窗口部件,但这只对窗口模式的部件有效。对于子窗口,若其特征为Qt:SubWindow,则它并非一个独立的窗口,对其直接调用showFullScreen()无效。要使其全屏显示,可以先将子窗口通过调用setWindowFlags(Qt:Dialog)或setWindowFlags(Qt:Window)设为窗口模式,之后便可调用showFullScreen()函数进行全屏显示。此外,若要对窗口进行移动或调整大小,直接使用move和resize函数在QT中是无效的,需要先将子窗口设为非窗口模式,即先调用setWindowFlags(Qt:Dialog)或setWindowFlags(Qt:SubWindow),然后再执行移动或调整大小操作。
接着,当退出全屏显示状态时,常见做法是调用showNormal()后再调用setWindowFlags(Qt:SubWindow)。但这种方法存在两个问题:一是showNormal()只对顶级窗口有效,二是即使窗口回到父窗口中,也不一定会显示原来的大小。
消除鼠标指针的方法主要有四种。方法1是在程序运行时添加参数-nomouse,但这会导致鼠标指针和触摸屏一同失效。方法2是通过QWidget的setCursor函数设置为Qt::BlankCursor,但这种方法只有在触摸屏被触动时鼠标指针才会消失。方法3是在main函数中调用QApplication::setOverrideCursor(Qt::BlankCursor),同样只在触摸屏被触动后鼠标才会消失。方法4是通过在main函数中包含头文件<QWSServer>,实例化QApplication后添加QWSServer::SetCursorVisible(false),这种方法可以让程序启动到运行期间鼠标指针都消失。
实现数码相框的全屏显示可以采用方法2,即使用showFullScreen()函数,但为了在PC机上模拟程序运行显示情况,在调试时可以将showFullScreen()函数替换为在每个窗口函数中添加代码设置窗口标志和调整窗口大小。
至于隐藏鼠标指针的实现,则采用方法4,即在main()函数中加入#include<QWSServer>,实例化QApplication后,通过QWSServer::setCursorVisible(false)隐藏鼠标指针。需要注意的是,在QT Embedded应用中,并没有严格区分server和client进程。如果QT进程的启动参数中有-qws,那么该进程将具有server的管理功能,被称作QWS server。QWSServer的初始化是在QApplication的初始化过程中完成的。
针对在QT环境编译时遇到的错误,错误提示为“main.o: Infunctionmain':main.cpp:(.text+Ox35):undefined reference to"QWSServer'::sSetCUrsorVisible(bool)”,这可能是由于没有正确链接到QWSServer库或未正确包含必要的头文件导致的。因此,在实际开发中,需要确保所有的库文件都已正确链接,并且所有需要的头文件都已经被包含,以便程序能顺利编译和运行。