2010-05-27 66 views
1

Greetings, 我是QT(4.6)的新手,对于它的事件机制有一些基本的问题。我来自Swing背景,所以我试图将它与QT进行比较。基本的QT事件处理/线程问题?

1)事件处理循环是否在单独的线程中运行? (如Swing中的EventDispatch线程)?

2)如果我们打开几个'QMainWindow',他们在几个线程中运行吗?

3)什么是在单独的线程中运行密集进程的最佳方式? (如SwingWorker in Swing?)

4)如果inteinter-process在一个单独的线程中运行,是否有可能从该进程调用像update(),repaint()这样的UI方法?

在此先感谢。

回答

3

1事件循环在同一个线程

2所有的UI元素都生活在同一个线程中,你的main()函数执行一个运行。

3有QThread类,它允许你有一个线程与单独的事件循环。有QRunable抽象类能够使用QThreadPool在单独的线程中运行重复长时间运行的任务。 ()和repaint()是插槽,从独立线程调用它们的最佳方式是使用排队连接,并在对象中使用排队连接,它位于单独的线程中(读取QObject :: connect文档关于连接类型)

您可以通过阅读我提到的课程文档来找到所有必要的信息。

+0

感谢您的回答,正在使用QtConcurrent :: run()比扩展QThread,QRunnable更好吗? – 2010-05-27 09:54:15

+1

是的,在大多数情况下应该会更好,但我还没有自己尝试过。 – VestniK 2010-05-27 10:35:18