Бесконечный цикл в проекте Qt Widget - PullRequest
0 голосов
/ 18 марта 2012

Я делаю что-то в проекте Qt Widget, написанном на C ++.Из-за того, что мне нужно сделать, мне нужен бесконечный цикл, и после проведенного исследования я понял, что бесконечный цикл в событии объекта не работает, и вместо этого мне нужно использовать некоторый поток ..

  1. Я решил использовать QTimer, но думаю об использовании QThread.Какой из них мне следует использовать?
  2. Это мой код QTimer, который, похоже, не работает:

    Clock_Application::Clock_Application(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::Clock_Application)
    {
        ui->setupUi(this);
        QTimer *timer_Stopwatch = new QTimer(this);
        connect(timer_Stopwatch, SIGNAL(timeout()), this, SLOT(timer_Start()));
        timer_Stopwatch->start(1000);
    }
    

Редактировать: aПростое исправление этого решения заключается в использовании функции QCoreApplication::processEvents() после каждой итерации цикла, поскольку это позволяет приложению виджета обрабатывать необходимые события.Однако это быстрое решение, и использование библиотеки QTimer - лучший способ исправить это.

Ответы [ 2 ]

2 голосов
/ 18 марта 2012

Как вы сами себе предлагаете, выполнение вашей обработки в отдельном потоке было бы вариантом, и я наверняка рассмотрю это. Я не думаю, что QTimer, как вы показываете, поможет.

Однако быстрое решение проблемы заключается в ручном вызове QCoreApplication::processEvents() в конце каждого цикла. Это обеспечит обработку всех ожидающих событий Qt, поддерживая отзывчивость вашего пользовательского интерфейса.

0 голосов
/ 28 июня 2016

Ваш таймер не работает, потому что он существует только в конструкторе.Вы должны объявить его как конструктор в заголовочном файле как приватный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...