天天看點

QT QMessageBox 彈出兩次的可能原因

QT QMessageBox 彈出兩次的可能原因

寫關閉确認對話框的時候發現點選關閉按鈕QMessageBox彈出了兩次,而經确認closeEvent隻觸發了一次,相關代碼如下:

void MainWindow::closeEvent(QCloseEvent* event)
{
	QMessageBox confirmBox(nullptr);
    confirmBox.setText("Config Changed");
    confirmBox.setInformativeText("Do you want to save the chance?");
    confirmBox.setStandardButtons(QMessageBox::No | QMessageBox::Yes | QMessageBox::Cancel);
    confirmBox.setDefaultButton(QMessageBox::Cancel);
    confirmBox.setFixedSize(200, 100);
    
	if(confirmBox.exec() == QMessageBox::Cancel)
	{
		event ->ignore();
    }
	else
    {
	    if(confirmBox.exec() == QMessageBox::Yes)
		{
			...	//其他代碼
            event ->accept();
        }
    }
}
           

原因是每次調用exec()時對話框都會彈出一次,改成下面這樣就行了:

void MainWindow::closeEvent(QCloseEvent* event)
{
	QMessageBox confirmBox(nullptr);
    confirmBox.setText("Config Changed");
    confirmBox.setInformativeText("Do you want to save the chance?");
    confirmBox.setStandardButtons(QMessageBox::No | QMessageBox::Yes | QMessageBox::Cancel);
    confirmBox.setDefaultButton(QMessageBox::Cancel);
    confirmBox.setFixedSize(200, 100);
    
	int button = confirmBox.exec();
	
	if(button == QMessageBox::Cancel)
	{
		event ->ignore();
    }
	else
    {
	    if(button == QMessageBox::Yes)
		{
			...	//其他代碼
            event ->accept();
        }
    }
}
           

繼續閱讀