QT中如何使QDialog dialog弹窗在点击OK按钮后不会消失退出
时间: 2024-04-13 18:28:57 浏览: 341
您可以通过重写 QDialog 的 closeEvent() 方法来实现在点击 OK 按钮后不让 QDialog 关闭。在该方法中,您可以检查关闭事件的原因,如果是由于点击了 OK 按钮,则忽略关闭事件。
下面是一个示例代码:
```
class MyDialog : public QDialog
{
Q_OBJECT
public:
MyDialog(QWidget *parent = nullptr) : QDialog(parent)
{
QPushButton *okButton = new QPushButton("OK", this);
connect(okButton, &QPushButton::clicked, this, &MyDialog::onOKClicked);
}
protected:
void closeEvent(QCloseEvent *event) override
{
if (event->spontaneous() && event->reason() == QCloseEvent::CloseButton)
{
event->ignore(); // 忽略关闭事件
}
else
{
QDialog::closeEvent(event);
}
}
private slots:
void onOKClicked()
{
// 处理 OK 按钮点击事件
}
};
```
在上面的示例中,我们重写了 QDialog 的 closeEvent() 方法,并在该方法中检查关闭事件的 reason() 是否为 CloseButton(即点击了关闭按钮),以及事件是否是 spontaneous()(即不是由代码调用 close() 方法触发的)。如果满足这两个条件,我们调用 event->ignore() 来忽略关闭事件,从而使 QDialog 不会关闭。
请注意,这种方法只是阻止了点击关闭按钮导致 QDialog 关闭,如果有其他方式可以关闭 QDialog(例如按下 Esc 键),您可能需要进一步处理。
阅读全文