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

如何在QT中更新进度条时更改选项卡,qt,tabs,progress-bar,qwidget,Qt,Tabs,Progress Bar,Qwidget,我有一个带有几个标签的Qwidget。在其中一个选项卡中,单击按钮后,函数开始处理数据并更新进度条 我希望能够在这个进程运行时更改选项卡,目前它不允许我这样做。有什么想法吗 (1)必须使用无模式进程对话框而不是模式进程对话框。实际上,主事件循环必须获得允许用户交互的控件。 (2) 您应该将数据处理函数放在工作线程中,并从该线程调用一个进度对话框更新到主UI线程。这样,您的任务就不会阻塞UI,所以您可以同时与窗口交互(如更改选项卡) Qt还提供了实现此功能的方法,您可能希望参考: QFutu

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

我希望能够在这个进程运行时更改选项卡,目前它不允许我这样做。有什么想法吗

(1)必须使用无模式进程对话框而不是模式进程对话框。实际上,主事件循环必须获得允许用户交互的控件。

(2) 您应该将数据处理函数放在工作线程中,并从该线程调用一个进度对话框更新到主UI线程。这样,您的任务就不会阻塞UI,所以您可以同时与窗口交互(如更改选项卡)

  • Qt还提供了实现此功能的方法,您可能希望参考:
    • QFuture
      QtConcurrent::run()
      :在单独的线程中运行任务
    • QFutureWatcher
      :帮助监视工作线程中运行的任务的进度。 例子:
(1)必须使用非模态进程对话框而不是模态进程对话框。实际上,主事件循环必须获得允许用户交互的控件。

(2) 您应该将数据处理函数放在工作线程中,并从该线程调用一个进度对话框更新到主UI线程。这样,您的任务就不会阻塞UI,所以您可以同时与窗口交互(如更改选项卡)

  • Qt还提供了实现此功能的方法,您可能希望参考:
    • QFuture
      QtConcurrent::run()
      :在单独的线程中运行任务
    • QFutureWatcher
      :帮助监视工作线程中运行的任务的进度。 例子:

    • 下面的逻辑可能对您有所帮助

    • 可以通过使用QThread实现这一点
    • 将进程移动到单独的线程(假定为工作线程)
    • 所以现在将有两个线程(1.主线程和2.工作线程)
    • 从工作线程执行进程
    • 使用信号和插槽机制在主线程(1)和工作线程(2)之间通信(更新GUI和/或执行某些进程)
    • 此逻辑将阻止应用程序挂起
    • 请参阅此以了解详细信息 您可以获得遵循上述逻辑的示例应用程序

      应用程序屏幕截图:

      启动进程(线程):启动线程并执行进程

      停止进程(线程):停止下面的线程逻辑可能会帮助您

    • 可以通过使用QThread实现这一点
    • 将进程移动到单独的线程(假定为工作线程)
    • 所以现在将有两个线程(1.主线程和2.工作线程)
    • 从工作线程执行进程
    • 使用信号和插槽机制在主线程(1)和工作线程(2)之间通信(更新GUI和/或执行某些进程)
    • 此逻辑将阻止应用程序挂起
    • 请参阅此以了解详细信息 您可以获得遵循上述逻辑的示例应用程序

      应用程序屏幕截图:

      启动进程(线程):启动线程并执行进程
      停止进程(线程):停止线程