QT将Mainwindow声明为主类

时间:2013-06-19 12:03:06

标签: c++ qt

我在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,以便我不会收到此错误

2 个答案:

答案 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;
}