问候, 我是QT(4.6)的新手并且对它的事件机制有一些基本的问题。我来自Swing背景所以我试图将它与QT进行比较。
1)事件处理循环是否在单独的线程中运行? (比如Swing中的EventDispatch线程)?
2)如果我们打开几个'QMainWindow'它们会在多个线程中运行吗?
3)在单独的线程中运行密集型流程的最佳方法是什么? (比如Swing中的SwingWorker?)
4)如果intesive-process在一个单独的线程中运行,是否可以从该进程调用诸如update(),repaint()之类的UI方法?
提前感谢。
答案 0 :(得分:3)
1在同一个线程中运行的事件循环
2所有UI元素都与执行main()函数的线程位于同一个线程中。
3有QThread类允许你有一个带有单独事件循环的线程。有QRunable抽象类可以使用QThreadPool在不同的线程中运行重复的长时间运行任务。
4 update()和repaint()是插槽,从单独的线程调用它们的最佳方法是使用排队连接与对象中的信号,该信号位于单独的线程中(读取QObject :: connect文档和关于连接类型)
通过阅读我提到的课程文档,您可以找到所有必要的信息。