0

我在 C++ 中有这两个类

图形用户界面.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
}

图形用户界面.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 以使我不会收到此错误

4

2 回答 2

3

你不能(嗯,你可以,但你不应该)。MainWindon 声明是正确的。问题是您在创建 QApplication 之前尝试创建 GUI 对象。

为什么不在创建 GUI 对象的地方创建 QApplication,就在它之前呢?

于 2013-06-19T12:07:27.783 回答
0

我会让 wa 指针使用 MainWindow 的前向声明,并从 GUI.h 中删除所有包含(包括 mainwindow.h 的 2 个包含)。然后就像塞巴斯蒂安的回答说首先构建 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;
}
于 2013-06-19T12:48:01.297 回答