QDialog
同様の機能を実装するためにサブクラス化しましたQMessageBox
(カスタマイズを可能にするためにこれが必要でした)。テキスト メッセージと [OK]、[キャンセル] ボタンがあります。exec()
ブロックするために使用するダイアログを表示しています。では、ユーザーが [OK] または [キャンセル] をクリックしたときに true/false の値を返すにはどうすればよいでしょうか?
ボタンを接続してからsetResult()
、クリックすると結果の値を返すようにしましたが、
- ボタンをクリックしてもダイアログ ボックスが閉じない
- 戻り値が正しくありません。以下は私が書いたコードです。exec/result 部分が間違っていると思いますが、修正方法がわかりません。
class MyMessageBox : public QDialog {
Q_OBJECT
private slots:
void onOKButtonClicked() { this->setResult(QDialog::Accepted); }
void onCancelButtonClicked() { this->setResult(QDialog::Rejected); }
public:
MyMessageBox(QMessageBox::Icon icon, const QString& title,
const QString& text, bool showCancelButton = true,
QWidget* parent = 0);
virtual void resizeEvent(QResizeEvent* e);
QDialog::DialogCode showYourself()
{
this->setWindowModality(Qt::ApplicationModal);
this->exec();
return static_cast<QDialog::DialogCode>(this->result());
}
};
ユーザーはクラスをインスタンス化しshowYourself()
、値を返すと予想される呼び出しを行い、ダイアログを閉じます (そして削除します)。
部分的なコードを投稿しました。さらに必要な場合はお知らせください。完全版を投稿します。