嵌入式Linux中的Qt:启动时隐藏光标

4
我正在开发一个在嵌入式Linux系统上运行的Qt应用程序。 该系统配有触摸屏,但也有一个OTG USB端口,必须能够使用鼠标。

所以我的问题是,当应用程序启动时,在屏幕中央显示鼠标指针,然后当主窗口的绘制事件发生时,它就会消失。

当应用程序启动后,如果插入了鼠标,我可以隐藏/显示光标,这很好,但是在启动过程中始终会有光标。

我尝试过: QWSServer::setCursorVisible(false);

或者: qApp->setOverrideCursor(QCursor(Qt::BlankCursor));

结果与上述描述相同。

我发现唯一的隐藏启动时光标的方法是编译Qt时去除Cursor,但那样就无法在插入鼠标时使用光标(这很合理...)。

所以如果你有什么想法,我会很高兴听到的:-)

谢谢, Sylvain

编辑: 好的,那么这就是QWS服务器在启动时显示光标,我在qt/src/gui/embedded/qwscursor_qws.cpp中找到了它:

void QWSServerPrivate::initializeCursor()
{
    Q_Q(QWSServer);
// setup system cursors
#ifndef QT_NO_QWS_CURSOR
//    qt_screen->initCursor(sharedram + ramlen,true);

// default cursor
    cursor = 0;
    setCursor(QWSCursor::systemCursor(Qt::ArrowCursor));
#endif
    q->sendMouseEvent(QPoint(swidth/2, sheight/2), 0);
}

现在如果我注释掉“setCursor”指令,这样就解决了问题,但是直接编辑Qt源代码来做这件事情有点丑陋,所以如果你有更好的解决方案...

1
在调用 qApp->exec() 之前,您应该能够在 main.cpp 文件中调用 qApp->setOverrideCursor(),这样启动时就不会看到光标。 - Sebastian Lange
这就是我所做的,但是光标出现在“app = new QApplication(qtArgc, qtArgv);”调用之后。我认为它是在QWS服务器启动时出现的。 - Sylvain V
2个回答

6
这段代码似乎是在使用 QWS,并且不支持 Qt5,而是针对 Qt4
QWSServer *server = QWSServer::instance();
if(server) {
    server->setCursorVisible(false);
}

将使用QWSQt4.x一起工作。 重要的一点是只有服务器可以这样做。 即,使用-qws调用的程序。 如果您运行多个应用程序,则客户端将无法禁用光标。
这应该在第一个show()showFullScreen()之前构造QApplication后完成。 您可能尝试在构建QApplication之前执行此操作。 编辑:由于您似乎是指应用程序最初显示时,
#define QT_NO_QWS_CURSOR 1添加到MyQconfig文件中,并将其传递给带有-qconfig MyQconfig选项的./configure。 或者您可以使用图形工具qconfig自定义Qt。 qconfig位于tools目录中。 项目列表可在src/corelib/global/qfeatures.txt中找到。 有关更多信息,请参见微调Qt

是的,我正在使用带有QWS的Qt 4.8.4。 我在我的main.cpp中尝试了以下代码:app = new QApplication(qtArgc, qtArgv); QWSServer::setCursorVisible(false); windows = new MainWindows(); windows->show(); return app->exec();但它不起作用,因为当应用程序创建时,QWSServer会显示光标,所以在从“new QApplication”返回之前就显示了光标,然后在显示主窗口时消失。 - Sylvain V
3
我更新了我的回答,假设你永远不想要光标。如果你想最初不显示光标,但是之后一段时间后再显示它,那么唯一的选择就是修改源代码。 - artless noise
另一种可能性是在应用程序运行之前完全清空屏幕。*/sys/class/graphics*中有文件可以在应用程序激活之前使显示器变暗。QWS可能会自动取消屏幕变暗,你仍然会看到光标;我还没有测试过这个功能。对于我们的系统,我们永远不想要鼠标指针。 - artless noise

2
#include <QScreenCursor>
QScreenCursor *cursor = new QScreenCursor;
cursor->initSoftwareCursor();
cursor->hide();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接