在这有一个父类,里面定义了Q_OBJECT宏,但是继承这个类的子类,却没有办法连接信号槽:
class QtRightTypeAction : public QObject {
Q_OBJECT
public:
QtRightTypeAction(QObject *parent);
~QtRightTypeAction();
virtual QMenu* typeMenuList();
protected:
QMenu* _typeMenu = nullptr;
};
QtRightTypeAction::QtRightTypeAction(QObject *parent)
: QObject(parent) {
_typeMenu = new QMenu;
}
QtRightTypeAction::~QtRightTypeAction() {
}
QMenu* QtRightTypeAction::typeMenuList() {
return _typeMenu;
}
子类:
class QtRightTypePointAction :public QtRightTypeAction {
public:
QtRightTypePointAction();
~QtRightTypePointAction();
virtual QMenu* typeMenuList()override;
private slots:
void slotEditPropAction();
void slotInputAction();
};
QtRightTypePointAction::QtRightTypePointAction():QtRightTypeAction(nullptr) {
QAction *editAction = _typeMenu->addAction(QStringLiteral("编辑属性"));
bool b = connect(editAction, SIGNAL(triggered()), this, SLOT(slotEditPropAction()));
QAction *inputAction = _typeMenu->addAction(QStringLiteral("手动添加"));
b = connect(inputAction, SIGNAL(triggered()), this, SLOT(slotInputAction()));
}
QtRightTypePointAction::~QtRightTypePointAction() {
}
QMenu* QtRightTypePointAction::typeMenuList() {
return _typeMenu;
}
void QtRightTypePointAction::slotEditPropAction() {
}
void QtRightTypePointAction::slotInputAction() {
}
但是在调用的时候,发现信号槽连接失败,返回值是false
输出界面输出的信息:
QObject::connect: No such slot QtRightTypeAction::slotEditPropAction()
发现问题了吗?它提示说父类中没有这个槽函数,但是我明明是在子类中连接的呀!
解决:在子类中添加宏
Q_OBJECT
既可以
class QtRightTypePointAction :public QtRightTypeAction {
Q_OBJECT //子类也要添加上这个宏
public:
QtRightTypePointAction();
~QtRightTypePointAction();
virtual QMenu* typeMenuList()override;
private slots:
void slotEditPropAction();
void slotInputAction();
};