1. ホーム
  2. c++

[解決済み] "QWidgetの前にQApplicationを構築しなければならない"

2022-02-26 02:59:35

質問

簡単なQtプログラムを作ろうとしています。何度かビルドして実行したのですが、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関数内でウィジェットを作成するか、グローバルアクセスが必要な場合はウィジェットへのグローバルポインタを保持するだけです(ただし、これは良いプログラミングスタイルとは言えません)。