Qt 5.15.2 Windows 子目录项目: undefined reference to `vtable for xxx‘

作者在Qt项目中遇到Q_OBJECT问题,类在Windows下Qt5.15.2报错,解决办法是将类定义和使用放同一目录。问题可能与Qt版本兼容性有关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上查了很多资料,都在说是 Q_OBJECT 的问题,但是不适用我的项目。

首先我有一个子目录项目,专门承载基础的 UI 控件,其中有这么一个:

#ifndef HOVERBUTTON_H
#define HOVERBUTTON_H

#include "QtCore/qcoreevent.h"
#include <QPushButton>
#include <QObject>
#include <QStyleFactory>

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 做的努力都不生效。。后来发现把这个类的定义和使用这个类的文件放在同一个子目录就好了,不知道为什么。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值