QObject::connect: 没有这样的信号(类名)(信号名)(属性)

Posted

技术标签:

【中文标题】QObject::connect: 没有这样的信号(类名)(信号名)(属性)【英文标题】:QObject::connect: No such signal(classname)(signalname)(atribure) 【发布时间】:2015-03-28 16:25:21 【问题描述】:

我有问题。编译时一切都很好,但是插槽不起作用。应用程序启动后,输出QObject::connect: No such signal CMatrix::ReadyToDraw(ww)。我测试了一下,插槽DrawFunction() 不起作用。由于分段错误,我无法调试。

header.h

class CMatrix:public QObject

    Q_OBJECT
public:
    int **m_pMatrix;
    const short int m_size=4;
public:
    CMatrix();
    bool checkFields();
    void setField();
signals:
    void ReadyToDraw(CMatrix *ww);
public slots:
    void MoveDown();
    void MoveTop();
    void MoveLeft();
    void MoveRight();
;
class MainWindow : public QWidget

    Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void DrawFunction(CMatrix *A);
public:
    QPushButton* butTop;
    QList<QLabel*> lblList;
;

ma​​in.cpp

#include "header.h"
#include <QApplication>

int main(int argc, char *argv[])

    QApplication a(argc, argv);
    MainWindow w;
    CMatrix *ww=new CMatrix;
    QObject::connect(w.butTop,SIGNAL(clicked()),ww,SLOT(MoveTop()));
    QObject::connect(ww,SIGNAL(ReadyToDraw(ww)),&w,SLOT(DrawFunction(ww)));
    w.show();


    return a.exec();

【问题讨论】:

【参考方案1】:

你的信号签名是

ReadyToDraw(CMatrix *)

不是

ReadyToDraw(ww)

因为 connect() 需要类型,而不是变量的名称。

所以把你的连接线改成:

QObject::connect(ww,SIGNAL(ReadyToDraw(CMatrix *)),&w,SLOT(DrawFunction(CMatrix *)));

【讨论】:

以上是关于QObject::connect: 没有这样的信号(类名)(信号名)(属性)的主要内容,如果未能解决你的问题,请参考以下文章

QObject::connect: 没有这样的信号错误 C++

QObject::connect: 没有这样的信号progressbarV::keyReleaseEvent()

QObject::connect: 没有这样的信号运行时警告 - 找不到原因

如果在调用 QObject::connect() 之前发出信号,如何避免竞争?

QObject::connect: 需要括号,信号 QSerialPort::readyRead in ..\voltage_sensor\dialop.cpp:41

如何修复QObject::connect:没有这样的插槽..将发送者连接到同一类中的插槽时[重复]