2013-05-21 7 views
2

Я запускаю приложение Qt Desktop на CentOS 6.4 с библиотеками Qt 5.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 пусто, и поэтому вызывает ошибку «индекс за пределами границ».

Мой вопрос: есть ли способ обойти это или, возможно, имитировать монитор?

+0

Является ли это графическим приложением? – UmNyobe

+0

Да, это так. С версиями Pre-Qt5 я мог использовать одно и то же приложение GUI с обоими серверами с мониторами и без них. Я надеюсь на то же самое здесь. – Brianjs

ответ

0

Возможно, вы обнаружили ошибку регрессии в Qt, так как я не нашел ничего подходящего в Qt4 to Qt5 changelog или в QtApplication documentation. IMHO он не должен терпеть крах и должен просто делать ненужную работу (как в Qt4). Однако вы можете выбрать тип экземпляра, который вы хотите создать. Документ дает минимальный пример:

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 не изменился, как много.

+0

Единственная проблема, с которой я сталкиваюсь в использовании версии, отличной от GUI, заключается в том, что я не могу использовать встроенное меню настроек или просматривать графические счетчики и т. Д. Это когда отображается при подключении через vnc/teamviewer. – Brianjs