如何要求密码才能关闭窗口?
Posted
技术标签:
【中文标题】如何要求密码才能关闭窗口?【英文标题】:How to require a password to close a window? 【发布时间】:2018-09-12 09:45:07 【问题描述】:我想保护一个窗口不被关闭,所以当用户尝试这样做时,必须输入密码才能完成操作。无需输入用户名。
我知道如何拦截QWidget::closeEvent
,如下例:
void MainWindow::closeEvent(QCloseEvent *event)
QMessageBox msgBox;
msgBox.setText(tr("Do you want to close the window?"));
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::No);
msgBox.setModal(true);
int ret = msgBox.exec();
if (ret == QMessageBox::Yes)
event->accept();
else
event->ignore();
问题是,该示例使用QMessageBox
,它不允许输入文本,因此不适合我的需要。
如何修改代码以提示输入密码?
【问题讨论】:
不能用QMessageBox
,它只支持yes/no/cancel等。看QInputDialog
,用textEchoMode
隐藏密码
成功了!!谢谢@YSC
@Minikornio,我可以请您将答案标记为已接受。
【参考方案1】:
解决方案
使用QDialog
代替QMessageBox
并根据您的需要进行调整。
示例
这是我为您准备的一个示例,用于演示如何实施建议的解决方案:
void MainWindow::closeEvent(QCloseEvent *event)
QDialog dialog(this);
auto *layoutDialog = new QVBoxLayout(&dialog);
auto *lineEdit = new QLineEdit(&dialog);
auto *label = new QLabel(tr("Enter password to close the window:"), &dialog);
lineEdit->setEchoMode(QLineEdit::Password);
layoutDialog->addWidget(label);
layoutDialog->addWidget(lineEdit);
layoutDialog->addStretch();
connect(lineEdit, &QLineEdit::editingFinished, [&]()
dialog.done(lineEdit->text() == "11223344");
);
dialog.resize(250, 100);
if (dialog.exec())
event->accept();
else
event->ignore();
注意:当然你必须想出一个更聪明的方法来保证密码的安全。
【讨论】:
以上是关于如何要求密码才能关闭窗口?的主要内容,如果未能解决你的问题,请参考以下文章