我正在尝试制作一个简单的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
My Main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
代码有什么问题,如何解决?
答案 0 :(得分:3)
您无法将窗口小部件创建为全局对象,因为这些对象将在主函数中的应用程序对象之前创建。然后你的错误就会发生。
在QApplication对象构造之后在main函数中创建窗口小部件,或者如果想要全局访问(但这不是一个好的编程风格),只需保留一个指向窗口小部件的全局指针。