没有监视器的QT 5应用程序崩溃



我在CentOS 6.4上运行Qt桌面应用程序与Qt 5库。

当我从VNC启动应用程序时,由于我们的一些服务器没有监视器,应用程序崩溃。从:

QApplication a(argc, argv);

我已经追踪到一个核心文件调用qxcbconnection.cpp和行:

xcb_create_window(m_connection, XCB_COPY_FROM_PARENT,
                  m_connectionEventListener, m_screens.at(0)->root(),
                  0, 0, 1, 1, 0, XCB_WINDOW_CLASS_INPUT_ONLY,
                  m_screens.at(0)->screen()->root_visual, 0, 0);

问题是,如果没有监视器连接,m_screens是空的,因此会导致"index out of bounds"错误。

我的问题是:有没有办法绕过这个问题,或者以某种方式模仿显示器?

您可能在Qt中发现了一个回归错误,因为我在Qt4到Qt5的更改日志中没有找到任何相关的内容,也没有在QtApplication文档中找到。在我看来,它不应该崩溃,应该只是做不必要的工作(就像在q4)。但是,您可以选择要创建的实例类型。文档给出了一个最小的例子:

QCoreApplication* createApplication(int &argc, char *argv[])
{
    for (int i = 1; i < argc; ++i)
        if (!qstrcmp(argv[i], "-no-gui"))
            return new QCoreApplication(argc, argv);
    return new QApplication(argc, argv);
}
int main(int argc, char* argv[])
{
    QScopedPointer<QCoreApplication> app(createApplication(argc, argv));
    if (qobject_cast<QApplication *>(app.data())) {
       // start GUI version...
    } else {
       // start non-GUI version...
    }
    return app->exec();
}

Ps:请注意,QApplication在幕后经历了重大变化,即使API没有发生太大变化。

相关内容

  • 没有找到相关文章

最新更新