Где разместить код приложения в приложении QT? - PullRequest
0 голосов
/ 18 июня 2010

Я начинаю с QT4, мне интересно, куда поместить код моего приложения.
Здесь?

void MainWindow::changeEvent(QEvent *e) {...}

Или здесь?(где именно?)

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

Если я хочу, чтобы мое приложение не только реагировало на пользовательские события, но и регулярно выполнялось в цикле, куда мне поместить цикл?

Ответы [ 2 ]

2 голосов
/ 19 июня 2010

Если вы не выполняете цикл в потоке, не связанном с GUI, вы будете блокировать GUI с помощью цикла (в неявном главном потоке GUI). Вот несколько разных подходов:

  1. Использовать темы . Сигналы и слоты Qt являются поточно-ориентированными. Таким образом, внутри потока вы можете вызвать ваш эмулятор (который может блокироваться) и который затем вернет данные вызывающему потоку. Затем вы можете отправить сигнал потоку GUI, который ответит на сигнал и соответствующим образом обновит GUI.
  2. Использовать таймер . Вы можете использовать QTimer (или таймер singleShot ) с задержкой в ​​ноль миллисекунд. Это вызывает вызов вашего слота как можно чаще, не блокируя цикл. Если слот быстро возвращается, это не будет блокировать графический интерфейс и немного упростит программирование.

Существуют и другие подходы, такие как processEvents () , но я бы лично рекомендовал подход потоков.

2 голосов
/ 19 июня 2010

Qt имеет собственный основной цикл, вы можете подключиться к нему с помощью класса QTimer.

Если вы хотите создать свой собственный цикл обработки событий, вы можете использовать QApplication :: processEvents (), чтобы подать сигнал Qt на обработку его событий (и сохранить ответственный интерфейс).

Кроме того, QAbstractEventDispatcher может быть полезно для вас.

Этот вопрос также может быть полезен.

...