c++ - 如何要求密码才能关闭窗口?
问题描述
我想保护一个窗口不关闭,所以当用户尝试这样做时,必须输入密码才能完成操作。无需输入用户名。
我知道如何拦截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
使用和塑造它。QDialog
例子
这是我为您准备的示例,以演示如何实施建议的解决方案:
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();
}
注意:当然,您必须想出一种更聪明的方法来保证密码的安全。
推荐阅读
- mysql - 在 mysql 中创建相同的表模式,如 Mongoose
- get - 机器人框架:KeyError:获取请求的“内容类型”
- regex - 如何检查列表中的单词是否与字符串中的单词匹配
- python - 如何忽略(绕过)“无法定位元素”异常?
- symbols - 为什么某些方程中的某些常数的符号在我们将其赋值为 1 时会被消除?
- angular - 以角关闭活动模态
- html - 将html转换为响应式
- python - 使用循环删除列表中不满足某些条件的元素
- wsgi - pythonanywhere - 如何配置 pythonanywhere_com_wsgi.py
- spring - 无法下载 Spring Roo