2015-09-26 8 views
0

У меня есть программа qt. Он имеет несколько классов и после определения глобальной переменной класса, унаследованного от QWidget, развертывание стало неудачным. что мне делать? Ошибка приведена ниже.Приложение завершено кодом выхода 134

QWidget: Должен построить QApplication перед QWidget
Баш: Строка 1: 2230 Aborted DISPLAY = ': 0,0'/программа-путь
Применение закончил с кодом завершения 134.

+1

было бы полезно, если бы вы могли предоставить исходный код. ;-) – Valinho

ответ

1

As это видно из сообщения об ошибке:

должны построить QApplication перед QWidget

Ваш глобальный унаследованный от QWidget построен до функции main.

Плохая идея иметь такой глобальный.

Однако, если вы действительно хотите повеселиться, вы можете попробовать какой-то синглтон или по крайней мере поставить статическую переменную в функцию getter, чтобы убедиться, что объект создается только во время первого доступа. Вы также должны быть уверены, что первый доступ после создания QApplication в main(). Классический шаблон приложения Qt Widget может выглядеть так:

MainWindow& getGlobalMainWindow() 
{ 
    static MainWindow w; 
    return w; 
} 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    getGlobalMainWindow().show(); 
    //... 
} 

Однако это действительно плохая идея. В приведенном выше примере MainWindow (и его дочерние виджеты) уничтожается после QApplication. Если некоторые из этих деструкторов полагаются на QApplication, это будет проблемой.

Таким образом, лучшим решением является избежание глобальных объектов QWidget.

Смежные вопросы