Qt中QObject::connect报错:无法调用无对象的成员函数
解决Qt信号槽连接错误:"cannot call a member function without object*"
你遇到的错误核心问题是:在调用QObject::connect时,错误地给信号和槽函数加了括号,导致代码试图直接调用函数,而非传递函数指针。
错误写法
QObject::connect(casilla,&customButton::hovered(),this,&board::mostrarCasilla());
正确写法
QObject::connect(casilla, &customButton::hovered, this, &board::mostrarCasilla);
原因说明
Qt新式信号槽语法要求传递函数指针,而非执行函数调用。&customButton::hovered()会尝试触发信号函数(但信号本身不允许手动调用),正确的写法是去掉括号,直接使用函数名获取指针;槽函数同理。
完整代码示例(修正后)
容器类头文件:
#include <QObject> #include "customButton.h" class board : public QObject { Q_OBJECT public: explicit board(QObject *parent = nullptr) : QObject(parent) { casilla = new customButton; // 修正后的信号槽连接 QObject::connect(casilla, &customButton::hovered, this, &board::mostrarCasilla); } signals: void hovered(); // 注:此为board类自身的信号,若无需转发可删除,避免与customButton的信号混淆 public slots: void mostrarCasilla(); private: customButton* casilla; // 建议将成员变量放在private区域,提升封装性 };
额外注意:确保customButton类正确继承QObject并添加Q_OBJECT宏,否则信号槽机制无法正常工作。
内容的提问来源于stack exchange,提问作者Juan Antonio Miralles
相关产品推荐
相关产品推荐

