Базовая обработка событий QT / Threading вопросы? - PullRequest
1 голос
/ 27 мая 2010

Приветствую, я новичок в QT (4.6) и у меня есть некоторые основные вопросы, касающиеся механизма событий. Я пришел из Swing, поэтому я пытаюсь сравнить его с QT.

1) Выполняет ли обработку событий-переход в отдельном потоке?(например, поток EventDispatch в Swing)?

2) Если мы откроем несколько QMainWindow, они запускаются в нескольких потоках?

3) Каков наилучший способ запустить интенсивный процесс в отдельномнить?(как SwingWorker в Swing?)

4) Если intesive-process выполняется в отдельном потоке, возможно ли вызывать такие методы пользовательского интерфейса, как update (), repaint () из этого процесса?

заранее спасибо.

1 Ответ

3 голосов
/ 27 мая 2010

1 Цикл событий, запущенный в том же потоке

2 Все элементы пользовательского интерфейса находятся в том же потоке, в котором выполнялась ваша функция main ().

3 Есть класс QThread, который позволяет вам иметь поток с отдельным циклом событий. Существует абстрактный класс QRunable, позволяющий запускать повторяющиеся длительные задачи в отдельных потоках с помощью QThreadPool.

4 update () и repaint () - это слоты, и лучший способ вызвать их из отдельного потока - это использовать соединение в очереди с сигналом в вашем объекте, который находится в отдельном потоке (см. Документацию QObject :: connect о типах соединений)

Вы можете найти всю необходимую информацию, прочитав документацию по упомянутым мною классам.

...