如何在QT中更新进度条时更改选项卡

时间:2016-07-21 03:17:37

标签: qt tabs progress-bar qwidget

我有一个带有几个标签的Qwidget。在其中一个选项卡中,单击按钮后,函数将开始处理数据并更新进度条。

我希望能够在此过程运行时更改标签,目前它不允许我这样做。任何的想法?

2 个答案:

答案 0 :(得分:1)

(1)你必须使用模态的无模式进程。实际上,主事件循环必须获得控件以允许用户交互。 http://www.bogotobogo.com/Qt/Qt5_QProgressDialog_Modal_Modeless_QTimer.php

(2)您应该将数据处理功能放到工作线程中,并从中调用进程对话框更新到主UI线程。这样你的任务就不会阻止UI,所以你可以同时与窗口交互(比如更改标签)。

答案 1 :(得分:1)

以下逻辑可以帮助你。

  1. 您可以使用QThread实现此目的。
  2. 将流程移至单独的线程(假设为工作线程
  3. 所以现在会有两个线程(1.主线程和2.worker线程)
  4. 工作线程
  5. 执行该过程
  6. 使用信号&插槽机制在主线程(1)和主线程之间进行通信。工作线程(2)(更新GUI和/或做一些过程)
  7. 此逻辑将阻止应用程序被挂起。
  8. 请参阅此link以了解详情。
  9. 您可以获取示例应用程序here,它遵循上述逻辑

    应用程序截屏:
    enter image description here

    开始进度(线程):启动线程并执行处理
    停止进程(线程):停止线程