我正在尝试制作一个简单的 Qt 程序。我已经成功地构建并运行了几次程序。当我添加一个 getter 方法将字符串从 MainWindow 传递到对话框QFileDialog::getSaveFileName()
时发生了这些错误但是当我在下面的行中注释时,程序会运行成功地。
主窗口.h
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
QString fileName();
};
Run Code Online (Sandbox Code Playgroud)
主窗口文件
QString MainWindow::fileName() {
return "F:/Users/Admin/Desktop/" + dnldName;
}
Run Code Online (Sandbox Code Playgroud)
文件名()的用法
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);
}
Run Code Online (Sandbox Code Playgroud)
该程序成功构建,但在我尝试运行时出现以下错误。
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
Run Code Online (Sandbox Code Playgroud)
主程序
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Run Code Online (Sandbox Code Playgroud)
代码有什么问题,我该如何解决?
您不能将小部件创建为全局对象,因为这些对象将在主函数中的应用程序对象之前创建。那么你的错误就会发生。
在 QApplication 对象构造之后在主函数中创建您的小部件,或者如果您想要全局访问(但这不是一种好的编程风格),则只保留一个指向您的小部件的全局指针。
归档时间: |
|
查看次数: |
10254 次 |
最近记录: |