我在 QT 中使用连接信号,当我在我们的设备上运行应用程序时出现以下错误,
QObject::connect: No such slot MainWindow::display_frame()
QObject::connect: (receiver name: 'MainWindow')
运行时应用程序错误。
下面是我的代码,
Mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
//qt includes
#include <QMainWindow>
#include <QGraphicsView>
#include <QTimer>
#include <QTime>
#include "iris_test.h"
extern int disp_status;
using namespace std;
using namespace cv;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void display_frame();
signals:
void request_iris_capture();
};
#endif // MAINWINDOW_H
Mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QThread>
#include <QTimer>
#include <QObject>
#include <QImage>
#include <QGraphicsView>
#include <QByteArray>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
scene = new QGraphicsScene();
scene = new QGraphicsScene(ui->graphicsView);
intervalTimer = new QTimer(this);
clock = new QTimer(this);
irisThread = new QThread();
Ir_Test = new Iris_Test();
Ir_Test->moveToThread(irisThread);
irisThread->start();
connect(this, SIGNAL(request_iris_capture()), Ir_Test, SLOT(Request_Stream()));
connect(Ir_Test, SIGNAL(display_irisdata()), this, SLOT(display_frame()));
emit request_iris_capture();
}
void MainWindow::display_frame()
{
qDebug() << "display frame function called" << endl;
}
iris_test.h
#ifndef IRIS_TEST_H
#define IRIS_TEST_H
#include <QThread>
#include <QObject>
class Iris_Test: public QObject
{
Q_OBJECT
public:
explicit Iris_Test(QObject *parent = 0);
int Streaming_init();
public slots:
void Request_Stream();
signals:
void display_irisdata();
};
#endif // IRIS_TEST_H
iris_test.cpp
#include "iris_test.h"
#include <QDebug>
#include <QTime>
#include "mainwindow.h"
#include <ui_mainwindow.h>
Iris_Test::Iris_Test(QObject *parent) :
QObject(parent)
{
}
void Iris_Test::Request_Stream()
{
emit display_irisdata();
}
仅供参考,
答案 0 :(得分:2)
您的头文件中似乎缺少 slots
关键字。如果没有它,moc 将不会在元对象系统中注册该方法。
display_frame()
的定义应如下所示:
public slots:
void display_frame();
但是,如果您不能使用 moc 关键字(signals
、slots
和 emit
),因为这些名称将被第三方库或您的代码使用,您可以按照 documentation 中的说明避免使用它们。