Как я уже упоминал в своем комментарии, ошибка, которую вы видите, предоставляет вам именно ту информацию, которую она должна была предоставить. Вы не можете вызывать QObject::setTimer
из потока, отличного от того, в котором был создан таймер. В частности, одна версия кода QObject
, которую я нашел, имеет этот код:
int QObject::startTimer(int interval)
{
Q_D(QObject);
if (interval < 0) {
qWarning("QObject::startTimer: QTimer cannot have a negative interval");
return 0;
}
d->pendTimer = true; // set timer flag
if (!d->threadData->eventDispatcher) {
qWarning("QObject::startTimer: QTimer can only be used with threads started with QThread");
return 0;
}
return d->threadData->eventDispatcher->registerTimer(interval, this);
}
Запишите код, генерирующий предупреждение.
Вызов метода pbar.setValue
, очевидно, вызывает этот метод startTimer
, который создает предупреждение.
Теперь я не уверен, в чем ваша проблема с этим? Вам абсолютно необходимо контролировать индикатор выполнения прямо из другого потока? Это не очень хорошая идея.