我正在使用Qt 5库在CentOS 6.4上运行Qt桌面应用程序。
当我从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为空,因此导致“索引越界”错误。
我的问题是:有没有办法解决这个问题,或者可能以某种方式模仿监视器?
答案 0 :(得分:0)
您可能在Qt中发现了回归错误,因为我在Qt4 to Qt5 changelog和QtApplication documentation中找不到任何相关内容。恕我直言,它不应该崩溃,应该做不必要的工作(如Qt4)。但是,您可以选择要创建的实例类型。 doc提供了一个最小的例子:
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没有发生太大变化。