Итак, у меня есть рабочий класс с двумя ячейками: StartWork () и StopWork (), StartWork () запускает бесконечный цикл (он просто читает и считывает данные с камеры без остановки), а метод StopWork () просто устанавливает логическое значение значение false (поэтому цикл внутри StartWork () останавливается).
согласно документации QThread, лучший способ использовать их сейчас - не разделять их на подклассы, а перемещать рабочих в поток, вот что я делаю. проблема в том, что сигнал start () из потока вызывается, но сигнал finished () никогда не вызывается.
Слоты рабочего класса:
void StartWork () {работает = правда; в то время как (работает) {делать работу; }}
void StopWork () {работает = ложь; }
Инициализация QThread и соединение сигнала / слота:
thread = new QThread();
worker = new Worker();
worker.moveToThread(thread);
QObject::connect(thread, SIGNAL(started()), worker, SLOT(StartWork()));
QObject::connect(thread, SIGNAL(finished()), worker, SLOT(StopWork()));
и на моем QPushButton я делаю это:
if(pushStartStop->text().toLower() == "start")
{
pushStartStop->setText("Stop");
thread->start();
}
else
{
pushStartStop->setText("Start");
thread->quit();
}
thread-> start () работает нормально, вызывается StartWork (), и все прекрасно (графический интерфейс работает без блоков и т. д.).
но thread-> quit () ничего не делает, он вызывается (потому что кнопка меняет текст), но это все. если я просто вызываю worker-> StopWork (), он работает, но потом я не могу запустить его снова.
Я пробовал с thread-> exit (); но результаты те же. Также я знаю, что подклассы работают, но это выглядит уродливее, и, согласно недавней документации Qt, подклассы больше не оптимальны.
заранее спасибо.