私のアプリケーションと私の質問の簡単な説明:
QTabWidget には、それぞれ 2 つの QRadioButton を含む複数の groupBox があります。例 Select Menu (groupBox): (RadioButton:) A (RadioButton:) B
ある時点でアクティブにできるメニューは 1 つだけです。両方の radioButton がそれぞれに接続されています -> radioButton A をクリックして true に設定すると、radioButton B は自動的に false に設定されます - そしてその逆です。
メニュー設定を変更しようとすると、クリック信号が発せられる前に、QMessageBox 警告「メニューを変更してもよろしいですか?これにより、デバイスに重大な損傷が生じる可能性があります。」を発行したいと考えています。-はい・いいえ。
[はい] をクリックすると、メニューの設定を変更します。いいえをクリックすると、すべてが以前のままになります。
唯一の問題は、on_radio_button_toggled スロットで QMessageBox を発行すると、radioButton の状態が既に true に変更されていることです。スロットの状態を再度変更して修正しても、ポップアップ メッセージが表示された時点で状態が変更されているように見えます。メニューの状態が既に変更されていることを意味するため、これは望ましくありません。
ラジオボタンをクリックしたときに、実際の信号スロットを放出する前に QMessageBox をどこで、またはどのようにポップアップさせることができますか?
ご助力ありがとうございます。
更新: 推奨どおりに eventFilter を実装しました。ここに私のソースコードがあります:
ui->radioButtonMenu1->installEventFilter(this);
ui->radioButtonMenu2->installEventFilter(this);
SubmenuOne は QWidget です。QTabWidget (プレースホルダー経由) によって MainWindow に統合されます。
bool SubmenuOne::eventFilter(QObject *obj, QEvent *event)
{
if(event->type() == QEvent::MouseButtonPress)
{
QMessageBox::StandardButton reply;
reply= QMessageBox::question(this,tr("WARNING"),tr("Changing the settings may cause severe damage to your device! Please confirm your decision."),QMessageBox::Yes|QMessageBox::No);
if (reply == QMessageBox::Yes)
{
//QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
//keyEvent->accept();
//event->accept();
qDebug("Yes.");
return false;
}
else
{
qDebug("No.");
return true;
}
}
}