#loops #qt #opencv #video-capture #qtimer
Вопрос:
У меня проблема с использованием команды QTimer. У меня нет синтаксической ошибки, но у меня есть 2 ошибки в qglobal.h и qobjectdefs_impl.h, и я их не понимаю.
MainWindow.cpp
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui-gt;setupUi(this); } void MainWindow::updatewindow() { Mat frame; capture gt;gt; frame; cvtColor(frame, frame, cv::COLOR_BGR2RGB); QImage image((uchar*)frame.data, frame.cols, frame.rows, frame.step, QImage::Format_RGB888); QPixmap temp_img = QPixmap::fromImage(image); ui-gt;label2-gt;setPixmap(temp_img); } void MainWindow::on_pushload_clicked() { QTimer *timer = new QTimer(this); connect(timer, amp;QTimer::timeout, this, SLOT(updatewindow())); timer-gt;start(20); }
У меня проблема с использованием команды QTimer. У меня нет синтаксической ошибки, но у меня есть 2 ошибки в qglobal.h и qobjectdefs_impl.h, и я их не понимаю.
и главное окно.h:
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include lt;QMainWindowgt; #include lt;QPixmapgt; #include lt;QTimergt; #include lt;iostreamgt; #include lt;opencv2/core/core.hppgt; #include lt;opencv2/opencv.hppgt; #include lt;opencv2/imgproc.hppgt; #include lt;opencv2/highgui.hppgt; namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: QPixmap Iblackwhite,IMG_Color{}; QImage image {}; cv::VideoCapture capture{}; private slots: void updatewindow(); void on_pushload_clicked(); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H
пожалуйста, помогите мне решить мою проблему.
Комментарии:
1. Вы смешиваете сигналы стиля Qt4 с сигналами стиля Qt5. В сигналах Qt4, которые разрешаются во время выполнения с использованием отражения, реализованного Qt. В Qt5 сигналы могут быть подключены типобезопасно и разрешаются во время компиляции (в случае ошибки компилятора). Вы не можете использовать стили Qt4 и Qt5 в одном приложении, но не в одном
connect()
— это просто не поддерживается. (Не то чтобы вы меня неправильно поняли: сигналы в стиле Qt 5 явно предпочтительнее.) 😉
Ответ №1:
Используйте amp;MainWindow::updateWindow
вместо SLOT(updatewindow())
.