开始使用Qt的工程师,要有个思想准备,标准的Application或者说Windows窗口类的工程和QML是不同的,很多控件在QML里面是不支持的。要了解QObject、QWidget、QMainWindow几个的不同。为何我会遇到这个问题呢?因为在做OpenGL想实现3D效果的时候,发现OpenGL的示例是基于QWidget的,而想在QML下实现遇到了困难,其基于QGLWidget类都是继承自QWidget。
几个基本概念:
QObject
是Qt中最基本的类,所有Qt中的对象都从该基类派生而来。有个标记,就是每次写带信号槽的类必须带。它是最顶级的,关键也是Qt元对象系统的重要概念,或者说很多QML中的类继承自它,继承了它就可以利用Qt信号槽、事件处理机制和属性等功能。
QWidget
是Qt中所有用户界面类的基类,注意是基类,它提供了空白窗口基本部件如菜单栏、工具栏、状态栏等。提供基本的窗口功能函数和信号,包括绘制、布局、尺寸调整、事件处理等。所以3D绘制是在窗口上绘制的,继承于它,而它属于Windows应用,不能用在QML中。
进一步就涉及到非QUI的Application:
QCoreApplication用于non-GUI的应用程序(不依赖QtGui库)
QApplication用于包含GUI的应用程序(用到QtGui库)。
继承关系:
QApplication->QGuiApplication->QCoreApplication->QObject。