“必须在 QWidget 之前构建 QApplication”
Posted
技术标签:
【中文标题】“必须在 QWidget 之前构建 QApplication”【英文标题】:"Must construct a QApplication before a QWidget" 【发布时间】:2014-04-17 14:59:44 【问题描述】:我正在尝试制作一个简单的 Qt 程序。我已经成功构建并运行了几次程序。当我添加一个 getter 方法将字符串从我的 MainWindow 传递到对话框的 QFileDialog::getSaveFileName()
时发生了这些错误但是当我在程序成功运行的下方注释。MainWindow.h
class MainWindow : public QMainWindow
Q_OBJECT
public:
QString fileName();
;
MainWindow.cpp
QString MainWindow::fileName()
return "F:/Users/Admin/Desktop/" + dnldName;
fileName() 的使用
void Dialog::on_browseButton_clicked()
QFileDialog folder;
folder.setFileMode(QFileDialog::Directory);
folder.setOption(QFileDialog::ShowDirsOnly);
dirPath = folder.getSaveFileName(this, tr("Save File"), mWinObj.fileName(), tr("All Files"));
ui->savePathEdit->setText(dirPath);
程序构建成功,但当我尝试运行它时出现以下错误。
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
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
代码有什么问题,我该如何解决?
【问题讨论】:
但是错误信息非常有用,不是吗?您是否构建 QApplication 以及何时构建?请也显示您的 main() 函数。 还有很多代码缺失(例如mWinObj
是什么?)。你能创建并发布一个SSCCE吗?
我错过了调用 folder.getSaveFileName 的地点和时间
你真正的主要功能是什么?如果先构造“a”,则不会发生“QWidget:必须在 QWidget 之前构造 QApplication”。还是您有任何小部件类型的全局对象?
@falkb mWinObj
是实际代码中的全局对象。这是错误的原因吗?
【参考方案1】:
您不能将小部件创建为全局对象,因为这些对象将在主函数中的应用程序对象之前创建。那么你的错误就会发生。
在 QApplication 对象构造之后在 main 函数中创建您的小部件,或者如果您想要全局访问(但这不是一种好的编程风格),则只需保留一个指向您的小部件的全局指针。
【讨论】:
以上是关于“必须在 QWidget 之前构建 QApplication”的主要内容,如果未能解决你的问题,请参考以下文章