【问题标题】:How resolve undefined reference to vtable in c++ on QT [duplicate]如何在 QT 上解决 C++ 中对 vtable 的未定义引用 [重复]
【发布时间】:2016-02-13 16:58:13
【问题描述】:

我有Ubuntu 14.04C++QT, 我将extend 班级QPushbutton,我将创建一个新的Slot 我愿意:

#include<QApplication>
#include<QDialog>
#include<QLabel>
#include <X11/Xlib.h>
#include<QVBoxLayout>
#include<iostream>
#include<QWidget>
#include<QPushButton>
#include <QThread>
#include <QGridLayout>
#include <QSplitter>
#include<QAbstractButton>
using namespace std;




class bot :  public QPushButton  {
   Q_OBJECT;

 public slots:
    void txt() {
        setText("hi");
         }


};


int main(int a , char * b[])
{
    QApplication application(a,b);
    QPushButton *button = new QPushButton();
    bot *l = new bot();
    button->setFixedSize(100,100);
    l->setText("sssssssssssssss");

    QVBoxLayout *ll  = new QVBoxLayout;
    ll->addWidget(l);
    ll->addWidget(button);
    QWidget x ;
    x.setLayout(ll);
    x.show();
    QObject::connect(button, SIGNAL(clicked()), l , SLOT( txt()) );

    return application.exec();


}

问题是:

/home/user/untitled6/sd.cpp:18:错误:未定义对`vtable的引用 对于机器人'

如何解决问题???

我的 file.pro 是:

SOURCES += \
    sd.cpp
QT += widgets

FORMS += \
    form.ui

【问题讨论】:

    标签: c++ qt extend


    【解决方案1】:

    通常,此类错误可以通过运行 QMake 来解决。每当您创建派生自 QObject 的新类时,Qt 的模型元对象编译器 (MOC) 需要为新类的元类自动生成代码——QMake 确保发生这种情况。

    如果您使用的是 Qt Creator,只需从 Build 菜单中选择 Run qmake

    您可能还需要运行Clean project XClean all,也可以在Build 菜单中找到。

    MOC 可以是喜怒无常的,所以你需要做到以下几点:

    • 将您的 QObject 派生类移动到单独的源文件和头文件中(在您的情况下,创建 bot.hbot.cpp,并将类代码移动到那里)
    • 插槽代码的单独声明和定义(在bot.cpp 中将txt 定义为bot::txt

    MOC 生成一个相应的元类文件(moc_bot.cpp,在您的情况下),当一个文件中有多个QObject 派生类时,有时会感到困惑。最佳实践是为每个QObject 派生类使用一个头文件和一个源文件。

    如果一切都失败了,您可能需要删除项目的.pro.user 文件,然后退出并重新启动 Qt Creator。然后从Build菜单中选择Clean allRun qmakeRebuild All

    【讨论】:

    • 还是一样的问题!
    • @SalamBoy 尝试清理项目,查看编辑
    • 我会的,还是一样的问题
    • 是的,谢谢 Tony,但为什么我必须将文件放入新的 Head 中?
    • @SalamBoy 很高兴它成功了,这是 moc 的一个怪癖,请参阅编辑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 2021-11-30
    • 2011-02-03
    相关资源
    最近更新 更多