Мне нужно написать приложение, которое отображает загруженное видео в одном виджете, вытягивает кадры, преобразует их и помещает их в другой виджет, желательно QGraphicsView и, надеюсь, синхронизируется. Для них очень важно синхронизировать их.Qt C++ - преобразование многопоточного видеофрагмента
Я написал тестовую нить, а главное мясо это:
void HSV::display() {
Ui::MainWindow ui; //1
int j=0;
QTimer *timer = new QTimer;
for(int i=1; i<4; i++){
QString numer = QString::number(i);
QImage imageTest(numer+".jpg");
QGraphicsPixmapItem* test = new QGraphicsPixmapItem(QPixmap::fromImage(imageTest));
QGraphicsScene* sceneHSV = new QGraphicsScene;
sceneHSV->addItem(test);
//2
ui.graphicsViewKalibracjaHSV->setScene(sceneHSV);
ui.graphicsViewKalibracjaHSV->fitInView(sceneHSV->sceneRect(),Qt::KeepAspectRatio);
ui.graphicsViewKalibracjaHSV->show();
timer->start(500);
if(i==3) {
i=1;
}
j++;
if (j>40) {
break;
}
}
}
это не то, что мне нужно, но это просто тест. Если я помещаю текст там, он проходит отлично, продолжает отображать. Но эти образы ... сразу же происходят сбой при достижении первой линии ui (// 2). Я не сомневаюсь, что этот способ делать все очень плохо.
Если я удалю Ui::MainWindow ui;
в // 1, он сообщает мне, что ui is not declared in this scope
.
Итак, мой вопрос в том, как я могу получить доступ и изменить элементы ui в Mainwindow из отдельного потока?
Редактировать: Хорошо, более практичная идея. Я собираюсь просто передать URL-адрес видеофайла из потока графического интерфейса в рабочий поток, выполнить все операции и передать 2 обработанных изображения назад (для каждого видеокадра), по одному для каждого QGraphicsView. Один нормальный, с отмеченными точками и один преобразованный. Теперь я знаю, как передавать вещи из рабочего потока в поток графического интерфейса, но как передать QString из графического интерфейса в рабочий поток и как его получить?
Я не вижу ** ui-> setupUi (это); ** – Greenflow