• Qt QProgressDialog new完后自动弹出问题


    问题描述: 在主窗口中初始化进度对话框 通过指针传递将进度对话框传递给各个算法类中已便在需要时候开启进度对话框执行任务。 本人将Qt版本升级为5.7.1后 进度对话框会在初始化时候 就会自动弹出一次。原因是QProgressDialog在初始化函数init()中就将计时器forcetimer开启 所以才会导致我们在初始化程序时候 进度对话框就会跳出来

     1 void QProgressDialogPrivate::init(const QString &labelText, const QString &cancelText,
     2                                   int min, int max)
     3 {
     4     Q_Q(QProgressDialog);
     5     label = new QLabel(labelText, q);
     6     bar = new QProgressBar(q);
     7     bar->setRange(min, max);
     8     int align = q->style()->styleHint(QStyle::SH_ProgressDialog_TextLabelAlignment, 0, q);
     9     label->setAlignment(Qt::Alignment(align));
    10     autoClose = true;
    11     autoReset = true;
    12     forceHide = false;
    13     QObject::connect(q, SIGNAL(canceled()), q, SLOT(cancel()));
    14     forceTimer = new QTimer(q);
    15     QObject::connect(forceTimer, SIGNAL(timeout()), q, SLOT(forceShow()));//定时器信号槽连接
    16     if (useDefaultCancelText) {
    17         retranslateStrings();
    18     } else {
    19         q->setCancelButtonText(cancelText);
    20     }
    21     starttime.start();
    22     forceTimer->start(showTime);//开启定时器
    23 }

    解决办法:
    浏览源码 发现在reset()函数中有计时器的stop函数被调用

     1 void QProgressDialog::reset()
     2 {
     3     Q_D(QProgressDialog);
     4 #ifndef QT_NO_CURSOR
     5     if (value() >= 0) {
     6         if (parentWidget())
     7             parentWidget()->setCursor(d->parentCursor);
     8     }
     9 #endif
    10     if (d->autoClose || d->forceHide)
    11         hide();
    12     d->bar->reset();
    13     d->cancellation_flag = false;
    14     d->shown_once = false;
    15     d->setValue_called = false;
    16     d->forceTimer->stop();//停止定时器
    17 }

    所以我们在new完进度对话框后 在调用一下reset函数即可

    1 QProgressDialog *m_progressDlg = new QProgressDialog(this);
    2 m_progressDlg->reset();
  • 相关阅读:
    selenium开发-C#/java/Python
    Web循环监控Java调用 / Java调用.net wcf接口
    网站循环加载监控-C#
    串口通信分析
    windows环境jar包部署到linux服务器,一键操作
    windows环境jar包部署到linux服务器,一键操作(帮助说明)
    Git+TortoiseGit使用帮助
    安装Docker
    MySQL报错信息:Warning: (1366, "Incorrect string value: '\xD6\xD0\xB9\xFA\xB1\xEA...' for column 'VARIABLE_VALUE' at row 489")
    txt文档中文乱码
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/16202638.html
Copyright © 2020-2023  润新知