crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Ошибка вида: QWidget: Must construct a QApplication before a QPaintDevice
Lampus
  опции профиля:
сообщение 9.6.2009, 17:23
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 24.5.2009
Пользователь №: 769

Спасибо сказали: 1 раз(а)




Репутация:   0  


Приветствую.
Прошу помочь с очередной моей глупой проблемой.
Имеется приложение делающее определённые вычисления и строящее двухмерные и трёхмерные графики. Используются библиотеки qwt и qwtplot3d соотв.
В Linux-е всё собирается и работает без проблем.
В винде также проблем при сборке не возникло, но при попытке всё это дело запустить приложение вываливается с ошибкой.
В консоли видно QWidget: Must construct a QApplication before a QPaintDevice.
Валится собственно при попытке создания экземпляра класса SurfacePlot из состава QwtPlot3d, если точнее то на строке:
plot = new Plot(data);

Указатель plot у меня объявляется непосредственно в классе формы:
class QOHForm : public QMainWindow, private Ui::MainForm
{
    Q_OBJECT

    public:
        [...]
        Plot *plot;
        [...]
}

Дело в том, что у меня создание экземпляра класса Plot (наследник SurfacePlot) происходит в одном из слотов, после того как произойдёт расчёт и будет заполнен объект data, указатель на который передаётся конструктору Plot.
Пожалуйста, помогите разобраться в чём тут проблема. Исходники своего кривоподелия прикрепил (за кривость сильно не пинайте - я только начинающий).

Прошу прощения за повтор темы, при попытке создания что то переклинило... Дубль прошу снести.
Прикрепленные файлы
Прикрепленный файл  overheat4.zip ( 10,86 килобайт ) Кол-во скачиваний: 189
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.6.2009, 17:27
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Lampus @ 9.6.2009, 21:23) *
QWidget: Must construct a QApplication before a QPaintDevice.
такое бывает когда ты пытаешся графические классы использовать/инициализировать до объявления QApplication.
Например создаёшь статический объект.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 9.6.2009, 17:31
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(Litkevich Yuriy @ 9.6.2009, 18:27) *
Цитата(Lampus @ 9.6.2009, 21:23) *
QWidget: Must construct a QApplication before a QPaintDevice.
такое бывает когда ты пытаешся графические классы использовать/инициализировать до объявления QApplication.
Например создаёшь статический объект.

Странно довольно таки.

#include <QApplication>
#include <QtCore>
#include <QtGui>
#include "qohform.h"

int main(int argc, char *argv[])
{
     QApplication app(argc, argv);
     QOHForm *w = new QOHForm;
     w->show();
     return app.exec();
}


Он такое сообщение выдает только в одном случае, когда глобальный указатель qApp не валидный:

    if (!qApp) {
        qFatal("QWidget: Must construct a QApplication before a QPaintDevice");
        return;
    }


Сообщение отредактировал SABROG - 9.6.2009, 17:34
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Lampus
  опции профиля:
сообщение 9.6.2009, 17:43
Сообщение #4


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 24.5.2009
Пользователь №: 769

Спасибо сказали: 1 раз(а)




Репутация:   0  


Всем спасибо за ответы, решил проблему. Оказывается qwtplot3d у меня был собран в debug, после пересборки его в release всё заработало, чудеса однако.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.12.2024, 10:07