QC++中如何解析C++中未定义的VTABLE引用
通常,这样的错误可以通过运行QMake来解决。每当您创建一个从QObject派生的新类时,Qt的模型元对象编译器MOC都需要自动生成新类的元类的代码—QMake确保这种情况发生 如果您使用的是QtCreator,只需从Build菜单中选择RunqMake 您可能还必须运行cleanprojectx或cleanlall,也可以在Build菜单中找到 主运行中心可能喜怒无常,因此您需要执行以下操作: 在您的案例中,将QObject派生类移动到单独的源文件和头文件中,创建bot.h和bot.cpp,并将类代码移动到其中 插槽代码的单独声明和定义将txt定义为bot.cpp中的bot::txt 在您的例子中,MOC生成一个对应的元类文件MOC_bot.cpp,当一个文件中有多个QObject派生类时,有时会感到困惑。最佳实践是为每个QObject派生类使用一个头文件和一个源文件QC++中如何解析C++中未定义的VTABLE引用,c++,qt,extend,C++,Qt,Extend,通常,这样的错误可以通过运行QMake来解决。每当您创建一个从QObject派生的新类时,Qt的模型元对象编译器MOC都需要自动生成新类的元类的代码—QMake确保这种情况发生 如果您使用的是QtCreator,只需从Build菜单中选择RunqMake 您可能还必须运行cleanprojectx或cleanlall,也可以在Build菜单中找到 主运行中心可能喜怒无常,因此您需要执行以下操作: 在您的案例中,将QObject派生类移动到单独的源文件和头文件中,创建bot.h和bot.cpp,并
如果所有其他操作都失败,您可能需要删除项目的.pro.user文件,然后退出并重新启动Qt Creator。然后从“生成”菜单中,选择“全部清除”,运行qmake,全部重建。问题仍然存在@SalamBoy尝试清理项目,见editI will,问题依然存在是的,谢谢Tony,但我为什么要把文件放到新的头上?@SalamBoy很高兴它成功了,这是商务部的一个怪癖,见edit
#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();
}
SOURCES += \
sd.cpp
QT += widgets
FORMS += \
form.ui