aoe1231

知之为知之,不知为不知

Qt项目中,在main.cpp中定义了一个自定义组件,但是在编译的时候报错`undefined reference to `vtable for MyWidget`

1、问题描述

我在测试Qt项目的main.cpp中编写了如下代码:

class MyWidget1: public QWidget {
    Q_OBJECT
};

// main 程序入口 argc命令行变量的数量 argv  命令行变量的数组
int main(int argc, char *argv[])
{
    // 应用程序对象,在Qt中应用程序对象有且仅有一个
    QApplication a(argc, argv);
    QTranslator translator;
    const QStringList uiLanguages = QLocale::system().uiLanguages();
    for (const QString &locale : uiLanguages) {
        const QString baseName = "TestDesktopProject_" + QLocale(locale).name();
        if (translator.load(":/i18n/" + baseName)) {
            a.installTranslator(&translator);
            break;
        }
    }

    qDebug();

    // 窗口对象 MyWidget父类 继承自 QWidget
    MyWidget1 w;
    // 窗口对象 默认不会显示,必须要调用show方法显示窗口
    w.show();

    // 让应用程序进入消息循环,让代码“阻塞”到这行
    return a.exec();
}

编译时报了如下错误:

初步判断可能跟Qt的元对象编译器有关。

2、原因

暂时还不清楚,等后面找到原因再回来进行补充。

3、解决方案

经过一些尝试,有2种方法可以避免报错:

1、删除 MyWidget1 类中的 Q_OBJECT 宏定义,但是也仅仅避免了报错而已;

2、给每个自定义的组件单独编写到对应的头文件和源文件中。

posted on 2024-09-30 15:24  啊噢1231  阅读(19)  评论(0编辑  收藏  举报

导航

回到顶部