2023-08-05QT0

目录

为什么要非模态?
如何解决?

为什么要非模态?

不然这样会阻塞进程。

如何解决?

案例1:ReadCard读取不到卡片,要弹出对话框。
mainwindow.h

c
private slots:
    void onCardReadFailed(const QString &errorMessage);

mainwindow.cpp

c
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
connect(readCard, &ReadCard::cardDataRead, this, &MainWindow::onCardDataRead);
}

void MainWindow::onCardReadFailed(const QString &errorMessage)
{
    // 在主线程中创建非模态的 QMessageBox
    QMetaObject::invokeMethod(this, [=]() {
        QMessageBox messageBox(QMessageBox::Warning, "警告", errorMessage, QMessageBox::Ok, this);
        messageBox.exec();  // 执行非模态对话框
        emit startCardTest();
    });
}

此时我只需要在ReadCard任意需要弹出对话框的地方发出信号即可。
ReadCard.h

c
signals:
    void cardReadFailed(const QString &errorMessage);

ReadCard.cpp

c
emit cardReadFailed("未检测到身份证读取器,请检查线路!");

本文作者:墨洺的文档

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!