QT 在主类之外声明 Mainwindow

Posted

技术标签:

【中文标题】QT 在主类之外声明 Mainwindow【英文标题】:QT declare Mainwindow out of the main class 【发布时间】:2013-06-19 12:03:06 【问题描述】:

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

【问题讨论】:

我会让 w 指针使用 MainWindow 的前向声明,并从 GUI.h 中删除所有包含(包括 mainwindow.h 的 2 个包含)。然后就像塞巴斯蒂安的回答说首先构建 QApplication 。 你可以把代码发给我吗? 【参考方案1】:

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

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

【讨论】:

因为我需要或者MainWindow或者QApplication等实例变量 对不起,我不明白你想说什么。 我需要在 gui.h 中有: private: MainWindow w; ;或私有:QApplication qa; ;或两者兼而有之 您可以随时使用 QApplication::instance() 方法从任何地方访问 QApplication 对象(它是一个单例)对象。 在 GUI 中有一个 MainWindow 成员很好。我的观点是,您应该在创建 GUI 对象的地方创建 QApplication 对象,而不是在 startGui 中。【参考方案2】:

我会让 w 指针使用 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;

【讨论】:

以上是关于QT 在主类之外声明 Mainwindow的主要内容,如果未能解决你的问题,请参考以下文章

@RestController 返回 404 not found 除了在主类中

设置在主类的子类中创建的 PyQt5 小部件的属性

首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能。

如何从同一项目中的另一个类访问主类中的变量? [复制]

MFC怎么在主窗口显示后,加载子窗口

编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的