C++ &引用;必须在QWidget“之前构造QApplication”;

C++ &引用;必须在QWidget“之前构造QApplication”;,c++,qt,C++,Qt,我正在尝试制作一个简单的Qt程序。我已经成功地构建并运行了好几次该程序。当我添加了一个getter方法,将字符串从主窗口传递到对话框的QFileDialog::getSaveFileName()时,出现了这些错误,但当我在下面的行中添加注释时,程序成功运行。 main window.h class MainWindow : public QMainWindow { Q_OBJECT public: QString fileName(); }; main window.c

我正在尝试制作一个简单的Qt程序。我已经成功地构建并运行了好几次该程序。当我添加了一个getter方法,将字符串从主窗口传递到对话框的
QFileDialog::getSaveFileName()
时,出现了这些错误,但当我在下面的行中添加注释时,程序成功运行。
main window.h

class MainWindow : public QMainWindow
{
    Q_OBJECT
    public:
    QString fileName();
};
main window.cpp

QString MainWindow::fileName() {
    return "F:/Users/Admin/Desktop/" + dnldName;
}
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}
文件名()的用法

该程序构建成功,但在我尝试运行时出现以下错误

Starting F:\Users\Admin\Desktop\Imp Docs\C++ apps\build-GUINetworkApp-Desktop_Qt_5_2_0_MinGW_32bit-Debug\debug\GUINetworkApp.exe...
QWidget: Must construct a QApplication before a QWidget
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.
F:\Users\Admin\Desktop\Imp Docs\C++ apps\build-GUINetworkApp-Desktop_Qt_5_2_0_MinGW_32bit-Debug\debug\GUINetworkApp.exe exited with code 3   
main.cpp

QString MainWindow::fileName() {
    return "F:/Users/Admin/Desktop/" + dnldName;
}
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}
#包括“mainwindow.h”
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
主窗口w;
w、 show();
返回a.exec();
}

代码有什么问题,如何修复?

您不能将小部件创建为全局对象,因为这些对象将在主函数中的应用程序对象之前创建。那么你的错误就会发生


在QApplication对象构造之后,在main函数中创建您的小部件,或者如果您想要全局访问(但这不是一种好的编程风格),则只保留一个指向小部件的全局指针。

但是错误消息信息非常丰富,不是吗?您是否在何时构建QApplication?请同时显示main()函数。仍然缺少很多代码(例如,
mWinObj
?)。你能创建并发布一个吗?我不知道folder.getSaveFileName在何时何地被调用。你真正的主要功能是什么?“QWidget:必须在QWidget之前构造QApplication”如果先构造“a”,则无法发生。或者您有任何小部件类型的全局对象吗?@falkb
mWinObj
是实际代码中的全局对象。这是错误的原因吗?