代码之家  ›  专栏  ›  技术社区  ›  SalamBoy

如何在QT[duplicate]上解析c++中对vtable的未定义引用

  •  2
  • SalamBoy  · 技术社区  · 9 年前

    我有 Ubuntu 14.04 , C++ , 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的引用 对于机器人

    如何解决问题???

    我的文件。专业是:

    SOURCES += \
        sd.cpp
    QT += widgets
    
    FORMS += \
        form.ui
    
    1 回复  |  直到 9 年前
        1
  •  1
  •   Tony the Pony    9 年前

    通常,类似的错误可以通过运行QMake来解决。任何时候创建一个派生自 QObject ,Qt的模型元对象编译器(MOC)需要自动生成新类的元类的代码——QMake确保了这一点。

    如果您正在使用Qt Creator,只需选择 Run qmake 来自 Build 菜单

    你可能还需要跑步 Clean project X Clean all ,也可在 建筑 菜单

    主运行中心可能是喜怒无常的,因此您需要做到以下几点:

    • 移动您的 Q对象 -派生类转换为单独的源文件和头文件(在您的情况下,创建 bot.h bot.cpp ,并将类代码移到那里)
    • 插槽代码的单独声明和定义(定义 txt bot::txt 在里面 机器人.cpp )

    MOC生成相应的元类文件( moc_bot.cpp ,在您的情况下),当存在多个 Q对象 -一个文件中的派生类。最佳做法是为每个文件使用一个标题和一个源文件 Q对象 -派生类。

    如果所有其他操作都失败,您可能需要删除 .pro.user 文件,然后退出并重新启动Qt Creator。然后从 建筑 菜单,选择 全部清除 , 运行qmake , Rebuild All .