Non-Qt Base Classes

Viewed 17480

I'm using Qt (which I'm new to) 4.8.2, with Visual Studio, and I have created a base class named "Contact". I don't want this class to be Qt-exclusive, so my intention was to make another class "QContact" that will inherit "Contact", and QObject and deal with all the Qt-related business, such as the Q_OBJECT macro etc.

Unfortunately when I inherited, the build failed, saying:

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'

I did a little research on the web and found out that you can't derive a Qt class from non-Qt class. so to fix it, "Contact" could inherit "QObject" (I tried, it worked). but doing so will make it exclusive to Qt which is my problem.

So what I ask is this: How can you make a non-Qt base class for a Qt class?

Thank you.

2 Answers

From An Introduction To Design Patters in C++ with Qt Chapter 8.4:

To help ensure that moc processes each QObject-derived class in the project, following are some guidelines for writing: C++ code and qmake project files:

• Each class definition should go in its own .h file.

• Its implementation should go in a corresponding .cpp file.

• The header file should be “wrapped” (e.g., with #ifndef) to avoid multiple inclusion. • Each .cpp file should be listed in the SOURCES variable of the project file; otherwise it will not be compiled.

• Each header file should be listed in the HEADERS variable of the .pro file. Without this, moc will not preprocess the file.

• The Q_OBJECT macro must appear inside the class definition of each QObject derived header file so that moc knows to generate code for it.

Related