如何要求密码关闭窗口?

问题描述 投票:1回答:1

我想保护窗口不关闭,因此当用户尝试这样做时,必须输入密码才能完成操作。无需输入用户名。

我知道如何拦截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,它不允许输入文本,因此它不适合我的需要。

如何修改代码以提示输入密码?

c++ qt user-interface passwords
1个回答
0
投票

Solution

而不是QMessageBox使用QDialog并根据您的需要塑造它。

Example

以下是我为您准备的示例,以演示如何实施建议的解决方案:

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();
}

注意:当然,您必须想出一种更智能的方法来保证密码的安全。

© www.soinside.com 2019 - 2024. All rights reserved.