Search code examples
c++qtqobject

QT: Is it a good idea to base my domain objects on QObject?


I'm reasonably new to using the QT framework in combination with C++. I was wondering: Is it a good idea to base my domain classes on QObject? Or should I only do this for classes higher up in the hierarchy? (closer to the user interface level). The QT documentation isn't clear on this:

Taken from the QT documentation:

The meta-object system is a C++ extension that makes the language better suited to true component GUI programming.

Obviously I want to build my application in a nice well structured way. Over the past few days I have been browsing through the QT documentation in order to find an answer to this question. I don't want to make some elementary mistake which will make my application limp for all eternity ;-).

I have already looked at the basic documentation for QObject and the Qt Object model. I also found a freshmeat article which helped but didn't really help me reach a conclusion. Something else that confuses me is that QT itself doesn't seem to be consistent on this matter because not all QT classes use QObject as a base class.

The advantages of using QObject as a base class as I see them:

  • Hierarchy
  • Signals and slots
  • Properties
  • Being able to use guarded pointers
  • Internationalization

However, I don't require any of these functionalities in most of my domain classes. Is there a best practise rule for this? Or should the rule be: use it if you require any of the points mentioned above?

Hope I didn't make this too confusing :-)


Solution

  • In general, unless there is a "compelling need," you are better off keeping your domain classes "vanilla." That gives you the most flexibility in the future (e.g. re-using them in a non-Qt environment).