Qtのダイアログで返り値を渡すには?

QDialog::accept() / reject() 最も一般的な方法。 // MyDialog.h class MyDialog : public QDialog { Q_OBJECT public: explicit MyDialog(QWidget *parent = nullptr); QString resultText() const { return m_result; } private slots: void onOkClicked(); private: QString m_result; }; // MyDialog.cpp MyDialog::MyDialog(QWidget *parent) : QDialog(parent) { auto *edit = new QLineEdit(this); auto *button = new QPushButton("OK", this); connect(button, &QPushButton::clicked, this, &MyDialog::onOkClicked); } void MyDialog::onOkClicked() { m_result = "ユーザーが入力した値"; // 何でも保存できる accept(); // ← ダイアログを閉じて OK を返す } 呼び出し側 MyDialog dlg; if (dlg.exec() == QDialog::Accepted) { QString value = dlg.resultText(); ... }

2026年1月21日

Qtでウィンドウが開かれてから処理を行うには?

Windowのコンストラクタ(初期化関数)にぶち込んでおけばいいです。 QTimer::singleShot(0, this, [this](){ qDebug() << "表示されてから処理されます" });

2026年1月21日

Qtでアプリが終了させられるときにダイアログを表示するには?

A. closeEvent() をオーバーライドする ウィンドウが閉じられる直前に呼ばれます。 ここでダイアログを出して、終了をキャンセルできます。 例:終了確認ダイアログ // MainWindow.h protected: void closeEvent(QCloseEvent *event) override; // MainWindow.cpp #include <QCloseEvent> #include <QMessageBox> void MainWindow::closeEvent(QCloseEvent *event) { auto ret = QMessageBox::question( this, "終了確認", "アプリを終了しますか?", QMessageBox::Yes | QMessageBox::No ); if (ret == QMessageBox::Yes) { event->accept(); // 終了OK } else { event->ignore(); // 終了キャンセル } } B. QCoreApplication::aboutToQuit 終了をキャンセルすることはできません 処理だけしたい場合に使います。 connect(qApp, &QCoreApplication::aboutToQuit, this, [](){ qDebug() << "アプリ終了直前"; });

2026年1月21日

Qtでステータスバーにウィジェットを追加するには?

1. 基本例(QMainWindow, 左端に固定) #include <QMainWindow> #include <QStatusBar> #include <QLabel> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { QLabel *statusLabel = new QLabel("準備完了"); statusBar()->addWidget(statusLabel); } 2. 右端に固定 QLabel *permanentLabel = new QLabel("v1.0.0"); statusBar()->addPermanentWidget(permanentLabel); 一時メッセージを表示 statusBar()->showMessage("保存しました", 3000); //3000ミリ秒 ステータスバーの作成 setStatusBar(new QStatusBar(this));

2026年1月3日