2013-05-21 3 views
2

Qt 5 라이브러리가있는 CentOS 6.4에서 Qt Desktop 응용 프로그램을 실행 중입니다.모니터가 없으면 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

GUI 응용 프로그램입니까 ?? – UmNyobe

+0

예. Pre-Qt5 버전을 사용하면 모니터가 있거나없는 두 서버에서 동일한 GUI 응용 프로그램을 사용할 수 있습니다. 나는 여기에서도 같은 것을 바라고있다. – Brianjs

답변

0

Qt4 to Qt5 changelog이나 QtApplication documentation과 관련된 내용을 찾지 못했기 때문에 Qt에서 회귀 버그를 발견했을 수 있습니다. 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(); 
} 

시 : :이 문서는 최소한의 예를 제공하는 API가 많이 변경하지 않은 경우에도 QApplication이 커튼 뒤에 큰 변화를 겪었다 있습니다.

+0

비 GUI 버전을 사용할 경우 유일한 문제점은 내장 된 설정 메뉴를 사용하거나 그래픽 미터 등을 볼 수 없다는 것입니다. 그 중 vnc/teamviewer를 통해 연결할 때 표시됩니다. – Brianjs

관련 문제