网上查了很多资料,都在说是 Q_OBJECT
的问题,但是不适用我的项目。
首先我有一个子目录项目,专门承载基础的 UI 控件,其中有这么一个:
#ifndef HOVERBUTTON_H
#define HOVERBUTTON_H
#include "QtCore/qcoreevent.h"
#include
#include
#include
class HoverButton : public QPushButton
{
Q_OBJECT
public:
explicit HoverButton(QWidget *parent = nullptr) : QPushButton(parent)
{
this->setAttribute(Qt::WA_TranslucentBackground);
this->setAttribute(Qt::WA_NativeWindow);
setFlat(true);
this->setStyle(QStyleFactory::create("Fusion"));
}
virtual ~HoverButton() {}
signals:
void hoverEnter();
void hoverLeave();
// QObject interface
protected:
bool event(QEvent *event) override
{
switch (event->type()) {
case QEvent::HoverEnter:
emit hoverEnter();
break;
case QEvent::HoverLeave:
emit hoverLeave();
break;
default:
break;
}
return QPushButton::event(event);
}
};
#endif // HOVERBUTTON_H
看着没有任何问题,我在另外一个子目录下去引用 HoverButton
,Qt 6.2.4 Mac 可以正常运行。放在 Qt 5.15.2 WIndows 就会报错:undefined reference to vtable for HoverButton
,朝 Q_OBJECT
做的努力都不生效。。后来发现把这个类的定义和使用这个类的文件放在同一个子目录就好了,不知道为什么。。