У меня есть процесс, который выполняет некоторые сложные математические операции с gl, а не с процессором (gl / gpu до сих пор работает примерно в 100 раз быстрее, чем процессор), но все же это примерно минута, чтобы обычные размеры задач были готовы, поэтому яЯ хотел получить хороший индикатор выполнения, чтобы знать, сколько времени это займет.
Поэтому я настроил свои классы на наследование от QObject
и получаю сигнал currentProgress(int)
, который посылается время от времени.К сожалению, моя программа зависает во время расчета, поэтому никакого прогресса не видно.Я нашел решение в вызове QCoreApplication::processEvents()
, что дало мне еще одну проблему.Во время этого вызова запускается перерисовка всего окна, в результате чего мой расчет вызывается в бесконечной рекурсии, потому что он сам запускается событием рисования.
Теперь все эти проблемы являются сигналами, которые говорят моей интуиции программированияслот, в котором я, вероятно, что-то неправильно спроектировал, поэтому я спрашиваю вас, как по умолчанию использовать обновленную строку прогресса в qt?
Также обратите внимание: когда я хочу перенести вычисления в другой поток, мне, вероятно, нужно создатьновый контекст GL или, по крайней мере, переместить существующий.Так что, если это путь, может кто-нибудь объяснить мне, как достичь этого в qt?
РЕДАКТИРОВАТЬ
Чтобы прояснить ситуацию, я не обращаю кQGLWidget, но с использованием FBO.Возможно, лучше всего использовать собственный контекст для расчетов, но я не знаю, правильный ли это путь.
Новая информация
Так что япытался последовать твоему совету, но наткнулся на проблему.QGLContext
, похоже, был подключен к объекту screen / gui, поэтому я не могу создать один закадровый.
Кроме того, я не могу сделать ток QGLWidget
в других потоках.Он возвращает ошибку QGLContext::makeCurrent(): Failed.
Далее все записи, о которых я читал, были людьми с такой же проблемой, как и я: они хотели сделать рендеринг в другом потоке и не нашли решения.