我正在使用Qt(我是新手)4.8.2,使用Visual Studio,我创建了一个名为“Contact”的基类。 我不希望这个类是Qt独占的,所以我的目的是创建另一个继承“Contact”的类“QContact”,以及QObject并处理所有与Qt相关的业务,例如Q_OBJECT宏等。
不幸的是,当我继承时,构建失败了,说:
moc_QContact.cpp(53): error C2039: 'staticMetaObject' : is not a member of 'Contact'
moc_QContact.cpp(75): error C2039: 'qt_metacast' : is not a member of 'Contact'
moc_QContact.cpp(80): error C2039: 'qt_metacall' : is not a member of 'Contact'
我在网上做了一些研究,发现你无法从非Qt类派生出一个Qt类。所以要解决它,“联系”可以继承“QObject”(我试过,它有效)。但这样做会让Qt专属于我的问题。
所以我问的是:你如何为Qt类创建一个非Qt基类?
谢谢。
答案 0 :(得分:81)
您可以从QObject
以及从其中派生的其他类派生您的类,但在基类列表中派生QObject
needs to be the first base class。
所以这是错误的:
class QContact: public Contact, public QObject {};
你需要把它写成
class QContact: public QObject, public Contact {};
答案 1 :(得分:0)
来自An Introduction To Design Patters in C++和Qt第8.4章:
帮助确保moc进程 项目中的每个QObject派生类,以下是一些编写指南: C ++代码和qmake项目文件:
•每个类定义都应该放在自己的.h文件中。
•它的实现应该放在相应的.cpp文件中。
•头文件应该“包装”(例如,使用#ifndef)以避免多次包含。 •每个.cpp文件都应列在项目文件的SOURCES变量中; 否则不会被编译。
•每个头文件都应列在.pro文件的HEADERS变量中。 如果没有这个,moc将不会预处理文件。
•Q_OBJECT宏必须出现在每个QObject的类定义中 派生头文件,以便moc知道为它生成代码。