C++ QT在主类之外声明Mainwindow
我有两门c语言的课++ GUI.cppC++ QT在主类之外声明Mainwindow,c++,qt,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.
#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
}
#包括“AL_GUI.h”
#包括
#包括“mainwindow.h”
GUI::GUI(){
}
void GUI::startGUI(){
int c=1;
字符*数组[10];
字符**v=&数组[0];
应用质量保证(c,v);
w、 show();
qa.exec();
}
void GUI::notifyAlert(){
}
GUI::~GUI(){
//TODO自动生成的析构函数存根
}
GUI.h
#包括
#包括“mainwindow.h”
#包括“mainwindow.h”
#ifndef GUI_H_
#定义图形用户界面_
类GUI{
公众:
GUI();
虚拟图形用户界面();
void startGUI();
void notifyAlert();
私人:
主窗口w;
};
#恩迪夫
但是当我运行这个程序时,我有一个错误:
QWidget:必须在QPaintDevice之前构造QApplication
如何在gui.h中声明MainWindow w,使我不会收到此错误您不能(当然,您可以,但不应该)。MainWindon声明是正确的。问题在于,您试图在创建QApplication之前创建GUI对象
为什么不在创建GUI对象之前创建QApplication呢?您不能(当然,您可以,但不应该)。MainWindon声明是正确的。问题在于,您试图在创建QApplication之前创建GUI对象
为什么不在创建GUI对象之前创建QApplication呢?我会为MainWindow创建一个指针,用于转发声明,并从GUI.h中删除所有包含项(包括MainWindow.h的两个包含项)。然后就像Sebastian的回答说的,首先构造QApplication 阿鲁圭
#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;
}
#包括“AL_GUI.h”
#包括
#包括“mainwindow.h”
GUI::GUI():w(空)
{
}
void GUI::startGUI(){
int c=1;
字符*数组[10];
字符**v=&数组[0];
应用质量保证(c,v);
w=新的主窗口;
w->show();
qa.exec();
}
void GUI::notifyAlert(){
}
GUI::~GUI(){
删除w;
}
我会为MainWindow创建一个使用转发声明的指针,并从GUI.h中删除所有包含项(包括MainWindow.h的两个包含项)。然后就像Sebastian的回答说的,首先构造QApplication
阿鲁圭
#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;
}
#包括“AL_GUI.h”
#包括
#包括“mainwindow.h”
GUI::GUI():w(空)
{
}
void GUI::startGUI(){
int c=1;
字符*数组[10];
字符**v=&数组[0];
应用质量保证(c,v);
w=新的主窗口;
w->show();
qa.exec();
}
void GUI::notifyAlert(){
}
GUI::~GUI(){
删除w;
}
我会为MainWindow创建一个使用转发声明的指针,并从GUI.h中删除所有include(包括MainWindow.h的2个include)。然后,正如Sebastian的回答所说,首先构造QApplication。你可以给我发代码来这样做吗?我会为MainWindow创建一个指针,并从GUI.h中删除所有的include(包括MainWindow.h的两个include)。然后就像Sebastian的回答说的,首先构造QApplication。你可以给我发代码来这样做吗?因为我需要或MainWindow或QApplication,比如实例变量,对不起,我不明白你想说什么。我需要在gui中使用它。h有:private:MainWindow w;};或私人:QApplication qa;};或者两者都可以使用QApplication::instance()方法随时从任何地方访问QApplication对象(它是一个单例对象)。在GUI中有一个MainWindow成员就可以了。我的观点是,您应该在创建GUI对象的地方创建QApplication对象,而不是在startGui中。因为我需要或MainWindow或QApplication,例如实例变量,对不起,我不明白您想说什么。我需要在GUI中使用它。h有:private:MainWindow w;};或私人:QApplication qa;};或者两者都可以使用QApplication::instance()方法随时从任何地方访问QApplication对象(它是一个单例对象)。在GUI中有一个MainWindow成员就可以了。我的观点是,您应该在创建GUI对象的地方创建QApplication对象,而不是在startGui内部。