我在c ++中有这两个类
GUI.cpp
#include "AL_GUI.h"
#include <QtGui/QApplication>
#include "mainwindow.h"
GUI::GUI() {
}
void GUI::startGUI(){
int c=1;
char *array[10];
char** v = &array[0];
QApplication qa(c,v);
w.show();
qa.exec();
}
void GUI::notifyAlert(){
}
GUI::~GUI() {
// TODO Auto-generated destructor stub
}
GUI.h
#include <QtGui/QApplication>
#include "mainwindow.h"
#include "mainwindow.h"
#ifndef GUI_H_
#define GUI_H_
class GUI {
public:
GUI();
virtual ~GUI();
void startGUI();
void notifyAlert();
private:
MainWindow w;
};
#endif
但是当我运行这个程序时,我有错误: QWidget:必须在QPaintDevice之前构建QApplication
如何在gui.h中声明MainWindow w,以便我不会收到此错误
答案 0 :(得分:3)
你不能(嗯,你可以,但你不应该)。 MainWindon声明应该是正确的。问题是您在创建QApplication之前尝试创建GUI对象。
为什么不在它之前创建创建GUI对象的QApplication?
答案 1 :(得分:0)
我会使用一个指针来使用MainWindow的前向声明,并从GUI.h中删除所有包含(包括mainwindow.h的2个包含)。然后就像Sebastian的回答一样,首先构建QApplication。
AL_GUI.h
#ifndef GUI_H_
#define GUI_H_
class MainWindow;
class GUI {
public:
GUI();
virtual ~GUI();
void startGUI();
void notifyAlert();
private:
MainWindow* w;
};
gui.cpp
#include "AL_GUI.h"
#include <QtGui/QApplication>
#include "mainwindow.h"
GUI::GUI() : w(NULL)
{
}
void GUI::startGUI(){
int c=1;
char *array[10];
char** v = &array[0];
QApplication qa(c,v);
w = new MainWindow;
w->show();
qa.exec();
}
void GUI::notifyAlert(){
}
GUI::~GUI() {
delete w;
}