【发布时间】:2013-12-17 12:56:58
【问题描述】:
我的类有一个大问题:我将在我的子类中使用Q_OBJECT 宏。但是如果我在我的子类中定义Q_OBJECT,它会抛出一个异常。这是一个例外:
undefined reference to `vtable for SubClassOne'
undefined reference to `vtable for SubClassTwo'
我的SubClassOne 和SubClassTwo 继承自BaseClass。
这里有一些代码:(所有#includes 都是正确的)
\\baseclass.h
class BaseClass
{
public:
BaseClass(QWidget *widget=0);
QHBoxLayout *mainLayout;
};
\\subclassone.h
class SubClassOne : public BaseClass, public QWidget
{
Q_OBJECT
public:
explicit SubClassOne(QWidget *widget=0);
};
\\subclasstwo.h
class SubClassTwo : public BaseClass, public QDialog
{
Q_OBJECT
public:
explicit SubClassTwo(QWidget *dialog=0);
};
.cpp 文件来了
//baseclass.cpp
BaseClass::BaseClass(QWidget *widget)
{
mainLayout = new QHBoxLayout();
}
//subclassone.cpp
SubClassOne::SubClassOne(QWidget *widget):BaseClass(widget)
{
setWindowTitle("Widget");
}
//subclasstwo.cpp
SubClassTwo::SubClassTwo(QWidget *dialog):BaseClass(dialog)
{
setWindowTitle("Dialog");
QPushButton *btn = new QPushButton();
QObject::connect(btn,SIGNAL(clicked()),SLOT(close()));
mainLayout->addWidget(btn);
setLayout(mainLayout);
}
main.cpp
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
SubClassTwo *s = new SubClassTwo();
s->show();
return a.exec();
}
如何在我的子类中使用Q_OBJECT?
【问题讨论】:
-
3) 你在标题上运行 moc
-
另外,
QObject(或从QObject派生的基类)必须是基类列表中的第一个。而且您不能多次或虚拟地继承QObject。 -
对不起我的错误,我忘记了,已经编辑了我的帖子,你能给我一个包含 ..moc 文件的例子吗?使用 Qt5
-
@Angew:这对 Qt 5 来说不是这样......
-
@LaszloPapp 再见!谢谢(你的)信息。我现在坚持使用 Qt4,但至少我会知道隧道尽头有光明。