自定义连接信号在 QT 中不起作用

时间:2021-03-16 07:07:29

标签: c++ qt qt5

我在 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();
}

仅供参考,

  1. 从 Mainwindow 向 Request_Stream() 发送 request_iris_capture 信号 - Request_Stream 函数被调用
  2. Request_Stream() 将向 display_frame() 函数发送信号 - 这不会发生

1 个答案:

答案 0 :(得分:2)

您的头文件中似乎缺少 slots 关键字。如果没有它,moc 将不会在元对象系统中注册该方法。

display_frame() 的定义应如下所示:

public slots:
    void display_frame();

但是,如果您不能使用 moc 关键字(signalsslotsemit),因为这些名称将被第三方库或您的代码使用,您可以按照 documentation 中的说明避免使用它们。

相关问题