qDialog 上的关闭按钮仅在第二次单击时关闭
close button on qDialog only closing on second click
我正在尝试生成一个对话框,其中包含一个独立于我的主程序的附加工具,它由菜单中的操作触发。
我有以下代码:
void MainWindow::on_actionCalibration_Tool_triggered()
{
QGridLayout *grid = new QGridLayout;
NewDialog.setLayout(grid);
NewDialog.setMinimumHeight(500);
NewDialog.setMinimumWidth(800);
QLabel *label = new QLabel;
QFont sansFont("MS Shell Dlg 2",22, QFont::Bold);
label->setText("Test");
label->setFont(sansFont);
QPushButton *okbutton = new QPushButton;
QPushButton *closebutton = new QPushButton;
okbutton->setText("Ok");
closebutton->setText("Close");
QTimer *timer = new QTimer;
connect(okbutton,SIGNAL(clicked()),this,SLOT(on_ScanpB_clicked()));
connect(closebutton,SIGNAL(clicked()),this,SLOT(CloseDialog()));
grid->addWidget(label);
grid->addWidget(okbutton);
grid->addWidget(closebutton);
NewDialog.exec();
NewDialog.show();
}
void MainWindow::CloseDialog()
{
NewDialog.close();
}
在 main window.h
中将 NewDialog
定义为 QDialog。
我的问题是当我点击关闭按钮时,对话框会关闭一瞬间然后重新打开,在我第二次点击关闭按钮后它就永远关闭了。
是否有更好的实现或解决方法?
谢谢
您不应该调用 QDialog::show
和 QDialog::exec
。相反,选择一个来调用。
如果要在对话框打开时阻止用户与对话框的父项交互,请使用 exec
。在关闭对话框之前,用户不会玩应用程序中的任何其他内容。这称为模态。
如果您希望允许用户同时使用对话框和应用程序的其余部分,请使用 show
。
通常您会选择 exec
。它更容易使用。在您的例子中,您通过调用两个函数显示了两次对话框。
我正在尝试生成一个对话框,其中包含一个独立于我的主程序的附加工具,它由菜单中的操作触发。
我有以下代码:
void MainWindow::on_actionCalibration_Tool_triggered()
{
QGridLayout *grid = new QGridLayout;
NewDialog.setLayout(grid);
NewDialog.setMinimumHeight(500);
NewDialog.setMinimumWidth(800);
QLabel *label = new QLabel;
QFont sansFont("MS Shell Dlg 2",22, QFont::Bold);
label->setText("Test");
label->setFont(sansFont);
QPushButton *okbutton = new QPushButton;
QPushButton *closebutton = new QPushButton;
okbutton->setText("Ok");
closebutton->setText("Close");
QTimer *timer = new QTimer;
connect(okbutton,SIGNAL(clicked()),this,SLOT(on_ScanpB_clicked()));
connect(closebutton,SIGNAL(clicked()),this,SLOT(CloseDialog()));
grid->addWidget(label);
grid->addWidget(okbutton);
grid->addWidget(closebutton);
NewDialog.exec();
NewDialog.show();
}
void MainWindow::CloseDialog()
{
NewDialog.close();
}
在 main window.h
中将 NewDialog
定义为 QDialog。
我的问题是当我点击关闭按钮时,对话框会关闭一瞬间然后重新打开,在我第二次点击关闭按钮后它就永远关闭了。
是否有更好的实现或解决方法?
谢谢
您不应该调用 QDialog::show
和 QDialog::exec
。相反,选择一个来调用。
如果要在对话框打开时阻止用户与对话框的父项交互,请使用 exec
。在关闭对话框之前,用户不会玩应用程序中的任何其他内容。这称为模态。
如果您希望允许用户同时使用对话框和应用程序的其余部分,请使用 show
。
通常您会选择 exec
。它更容易使用。在您的例子中,您通过调用两个函数显示了两次对话框。