Как запросить пароль для закрытия окна? - PullRequest
0 голосов
/ 12 сентября 2018

Я хотел бы защитить окно от закрытия, поэтому, когда пользователь пытается это сделать, необходимо ввести пароль для завершения действия.Нет необходимости вводить имя пользователя.

Я знаю, как перехватить 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, который не позволяет вводить текст, следовательно, он не соответствует моим потребностям.

Как изменить код для запроса пароля?

1 Ответ

0 голосов
/ 17 сентября 2018

Решение

Вместо 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();
}

Примечание: Конечно, вы должны придумать более разумный способ обеспечения безопасности пароля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...