Как использовать команду QTimer

#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()) .