说明:
- 下面的XX.XX.XX为Qt的版本号,如:5.14.1。
- 下面总结的都是以Qt的5.14.1版本来说明的,未来的版本也许和这有些不同。
- 因为Qt自带的例子很多,本博文是第1部分,第2、3、4、5、6部分请参见如下链接:
- 《Qt Example各例子技术点说明(二)》。
- 《Qt Example各例子技术点说明(三)》。
- 《Qt Example各例子技术点说明(四)》。
- 《Qt Example各例子技术点说明(五)》。
- 《Qt Example各例子技术点说明(六)》。
1. widgets\painting 部分
1.1. affine工程
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\painting\affine
该工程演示了Qt绘图中的仿射、平移、旋转的功能,该例子也展示了如何利用QCommonStyle绘制自定义的窗体部件。对该工程的具体剖析参见《Qt Examples之affine工程难点、亮点汇总》。
1.2 .Concentric Circle工程
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\painting\aconcentriccircles
该工程显示了如何利用 浮点精度和抗锯齿来提高渲染质量。主窗体通过组合浮点和抗锯齿来在不同窗体部件分别显示不同组合下的渲染效果。
1.3 composition工程
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\painting\composition
该工程显示了两张图像即源图像和目标图像通过不同的模式(QPainter::CompositionMode)融合后产生的显示效果,代码分析可参考《Qt 图像叠加模式[composition Modes]官方例子 源码解读》
、 《Qt Examples之imagecomposition工程分析》、《QPainter类的CompositionMode各值含义》
1.4 imagecomposition工程
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\painting\imagecomposition
该工程显示了两张图像即源图像和目标图像通过不同的模式(QPainter::CompositionMode)融合后产生的显示效果,代码分析可参考《Qt Examples之imagecomposition工程分析》
1.5 deform工程
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\painting\deform
该工程展示了如何操纵QPainterPath元素。
1.6 fontsampler
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\painting\fontsampler
该工程展示了:
- 利用QFontDatabase类枚举安装在本机上的所有字体、字体风格、字体属性。
- 利用QPrinter、QPrintDialog、QPrintPreviewDialog和打印有关的类的使用。
- 展示了QProgressDialog类用法。一个很好用的进度对话框类。
- qAsConst函数的使用。如果对该函数不懂,请参看《foreach、qAsConst用法总结》。
1.7 gradients
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\painting\gradients
该工程展示了QGradient及其子类QConicalGradient, QLinearGradient, and QRadialGradient实现各种渐变效果。
1.8 pathstroke
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\painting\pathstroke
该工程展示了QPainterPathStroker类的使用,工程里面用到一些数学。
1.9 transformations
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\painting\transformations
该工程展示了QPainter类进行旋转、缩放、平移 的绘图操作。
2. widgets\widgets部分
本大节展示了和Qt中的wiget相关的技术点,如:widget创建、属性、定时器、绘图等等。
2.1 wiggly
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\wiggly
该工程讲解了一个轻量级的定时器QBasicTimer类的用法,另外关于Qt的定时器类的用法总结,请参考《Qt定时器QBasicTimer、startTimer、QTimer使用总结》博文。
2.1 calculator
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\calculator
该工程用Qt实现了一个计算器。从该工程要学到如下知识点:
- QLineEdit 的setAlignment可以设置字符串右对齐。
- QLineEdit 的 setMaxLength设置编辑框最大字符数。
- SLOT槽函数作为参数传给createButton函数,这种传参方法本人很少用,觉得很新颖。
- \302\261,\303\267、\303\227,x\302\262是什么意思,怎么计算来的,参见 《Qt控件中打印特殊字符》文章。
2.2 calendarwidget
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\calendarwidget
该工程用Qt实现了日历控件。从该工程要学到如下知识点:
- 日历类QCalendarWidget用法。
- QLocale类的使用,如:QLocale::Language、QLocale::Country枚举使用。
2.3 charactermap
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\charactermap
从该工程要学到如下知识点:
- QFontComboBox类控件用法。该控件继承QComboBox,不用QFontDatabase搜索遍历字体库,就能直接加载所有系统中的字体。
- QScrollArea类用法。
- QFontDatabase类用法。
- QSignalBlocker类用法。
- QLineEdit类的setClearButtonEnabled设置为true后,右侧显示一个❌的清空按钮图
- QToolTip::showText显示工具提示。
2.4 codeeditor
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\codeeditor
本工程实现代码编辑器及代码行号功能。从该工程要学到如下知识点:
- QPlainTextEdit使用
- QWidget类的contentsRect用法。
- QWidget类的setViewportMargins。
- QTextEdit::ExtraSelection结构体用法。
- QPlainTextEdit类的firstVisibleBlock、blockBoundingGeometry、blockBoundingRect。
- QTextBlock类的blockNumber、isValid、isVisible使用。
2.5 digitalclock
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\digitalclock
本工程实现实现了一个数字式的时钟。从该工程要学到如下知识点:
- QLCDNumber类使用。
2.6 elidedlabel
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\elidedlabel
从该工程要学到如下知识点:
- QFrame 类使用。
- QTextLayout 、QTextLine类使用。
2.7 icons
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\icons
本例通过在不同平台风格(如:window vista、fusion)显示icon,icon在不同平台像素尺寸下显示的效果。通过本工程要学到如下知识点:
- QCommandLineParser类的使用
- QActionGroup的使用
- QButtonGroup的使用
- QStyleFactory的使用
- 如何从QSpinBox派生子类
- QIcon::Mode、QIcon::State枚举值的使用。
- QWidget的nativeParentWidget()含义、用法,具体参见:《QWidget的parentWidget、window、nativeParentWidget区别与理解》
- QWindow类的screenChanged信号
- QStyle的PixelMetric枚举的使用
2.8 imageviewer
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\imageviewer
本例通过QImageReader、QImageReader加载、保存图片功能。通过本工程展示了如下知识点的用法:
- 通过QImageReader读取图片到 QLabel并加入QScrollArea进行显示,以便能放下大图。
- 调用QLabel类的adjustSize()方法(从QWidget继承过来的)以使图片铺满整个QLabel对象。
- QStandardPaths获取一些标准的路径、目录。
- QImageReader、QImageWriter的supportedMimeTypes函数返回支持的Mime Type列表。
- QFileDialog的setMimeTypeFilters、selectMimeTypeFilter对Mime Type的操作函数。
- 利用QPrintDialog、QPrinter进行图片的打印预览和打印。
2.9 lineedits
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\lineedits
本例子展示了QLineEdit类常用属性用法。通过本例子展示了:
- QLineEdit类的EchoMode模式用法。
- QLineEdit类和QIntValidator或QDoubleValidator配合使用实现整形、双精度浮点型数据校验器使用。
- QLineEdit类左对齐、中间对齐、右对齐属性。
- QLineEdit类的setInputMask函数设置掩码。如:在编辑框中的只能是日期格式、License格式、电话号码格式。
2.10 mousebuttons
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\mousebuttons
本例展示了鼠标按下、滚动滚动,对各个鼠标键的监控功能。
2.11 movie
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\movie
本例展示了QMovie加载无音频的动画,进行播放、暂停、停止功能。
2.12 qttablet
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\qttablet
本例子展示了Qt实现平板、触控笔功能,如何处理tabletEvent事件。
2.13 scribble
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\scribble
本例子展示了如何在窗体上绘制图片,并在图片上按住鼠标、移动鼠标随机画线
并保存、打印图片。
2.14 shapedclock
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\shapedclock
本例子绘制了一个能根据时间走动的表盘式时钟。本例子需要学习到如何利用QRegion、setMask
Qt::WA_TranslucentBackground(在windows平台下一般需要结合Qt::FramelessWindowHint 使用)将窗体绘制为圆形
2.15 sliders
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\sliders
本例子展示了QScrollBar、QDial、QSlider用法。
2.16 spinboxes
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\spinboxes
本例子展示了各种SpinBox用法。尤其要注意如下函数的用法:
1:SpinBox的setSpecialValueText将最小值自动用一个有特殊含义的文本串表示。
2:SpinBox的ssetGroupSeparatorShown。当数值超过1000时,自动每三个数字加一个分隔 符,如1,000, 101, 000。
3: SpinBox的ssetDisplayIntegerBase.设置SpinBox显示数值的进制,如:16进制显示数值
4:QDateEdit、QTimeEdit用法。
5:SpinBox的ssetDecimals设置显示的数值精度,如:三位小数、四位小数等。
2.17 tetrix
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\tetrix
本工程通过实现一个俄罗斯方块的游戏,展示了QLCDNumber、QFrame、QBasicTimer类的用法。
2.18 tooltips
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\tooltips
本工程展示QToolBox用法。
2.19 validators
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\validators
本工程展示了QValidator及其子类QIntValidator、 QDoubleValidator用法。
2.20 windowflags
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\windowflags
本工程展示Qt::windowflags用法,Qt::windowflags更多用法,请参见
《Qt::WindowType、Qt::WidgetAttribute各个标志含义汇总》
2.21 analogclock
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\widgets\analogclock
本工程利用QPainter绘制了一个时钟,同2.14的shapedclock工程绘制的时钟类似。
3. widgets\animation部分
本节要用到Qt The State Machine Framework、The Animation Framework框架即Qt的动画、状态机框架知识。详细的内容请在Qt Assistant 的搜索页签中输入The State Machine Framework、The Animation Framework进行查看。可以参考简约版《Qt状态机框架知识点总结》
3.1 animatedtiles
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\animation\animatedtiles
展示了Qt的状态机相关类QState、QStateMachine及动画相关类QParallelAnimationGroup、QPropertyAnimation类的用法。本工程一大亮点是paint函数利用QStyleOptionGraphicsItem实现自绘按钮鼠标移动按下状态,具体剖析参见
《QStyleOptionGraphicsItem实现自绘按钮鼠标移动按下状态》
3.2 easing工程
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\animation\easing
通过本例子,要学习到:
- 如何从QPropertyAnimation继承派生出自己的属性动画子类,参见本工程的Animation类的实现。
- 如何利用Qt的QEasingCurve类进行动画插值。
- 通过类的staticMetaObject元对象静态成员及元对象的indexOfEnumerator方法获取枚举对象QMetaEnum。
- QMetaEnum类对枚举值中的key和字符串之间的转换、获取枚举值的个数。
3.3 states
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\animation\easing
通过本例子,要学习到:
- QGraphicsProxyWidget用法。
- QGraphicsLinearLayout、QGraphicsLayout布局器。
- QGroupBox的setFlat方法。
- QStateMachine、QState、QSequentialAnimationGroup、QPropertyAnimation用法。
3.4 stickman
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\animation\stickman
通过本例子,要学习到:
- QStateMachine、QState、QPropertyAnimation、QParallelAnimationGroup用法。
- 如何自定义QEventTransition、QSignalTransition。
本例子详细剖析参见《Qt Examples 之stickman工程分析》。
3.5 moveblocks
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\animation\moveblocks
通过本例子,要学习到:
- QStateMachine、QState、QPropertyAnimation、QParallelAnimationGroup、QSequentialAnimationGroup用法。
- 如何子类化QEvent、QAbstractTransition、QState。
本例子的具体剖析参见:《Qt Examples 之moveblocks工程分析》
3.6 sub-attaq
该工程存放在Qt安装目录下的Examples\Qt-XX.XX.XX\widgets\animation\sub-attaq
通过本例子,要学习到:
- QStateMachine、QState状态机相关类的用法。
- QPropertyAnimation、QParallelAnimationGroup、QSequentialAnimationGroup用法及动画类的pause、resume、start、stop方法。
- 如何子类化QEvent、QAbstractTransition、QState。
- QKeyEventTransition。
- Q_DISABLE_COPY用法及含义。
- QGraphicsScene类可以有多个视图。
4 widgets\statemachine
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\animation\statemachine
本节要用到Qt The State Machine Framework,详细的内容请在Qt Assistant 的搜索页签中输入The State Machine Framework进行查看。可以参考简约版《Qt状态机框架知识点总结》
4.1 eventtransitions
该工程存放在Qt安装目录下的
Examples\Qt-5.14.1\widgets\statemachine\eventtransitions
通过本例子,要学习到:
- QStateMachine、QState类的使用及关系。
- QEventTransition用法。
- QEventTransition怎么引起各个QState之间的切换。
4.2 factorial
该工程存放在Qt安装目录下的
Examples\Qt-5.14.1\widgets\statemachine\factorial
这个例子是通过状态机及状态类求阶乘。通过本例子,要学习到:
- QStateMachine、QState类的使用及关系。
- 如何子类化QSignalTransition。
- QStateMachine::SignalEvent类的理解。
- Qt元系统Q_PROPERTY的应用和宏Q_SIGNALS的作用。
4.3 pingpong
该工程存放在Qt安装目录下的
Examples\Qt-5.14.1\widgets\statemachine\pingpong
这个例子是通过状态机及状态类求阶乘。通过本例子,要学习到:
- QStateMachine、QState类的使用及关系。
- 如何子类化QState。
- 如何子类化QEvent。
- 如何子类化QAbstractTransition。
4.4 trafficlight
该工程存放在Qt安装目录下的
Examples\Qt-5.14.1\widgets\statemachine\trafficlight
这个例子是通过状态机及状态类实现了一个交通信号灯。通过本例子,要学习到:
- QStateMachine、QState类的使用及关系。
- QState、QTimer类的交互。
- QFinalState类的使用。
4.4 rogue
该工程存放在Qt安装目录下的
Examples\Qt-5.14.1\widgets\statemachine\rogue
这个例子是通过状态机及状态类实现了移动字符的小游戏。通过本例子,要学习到:
- QStateMachine、QState类的使用及关系。
- 如何子类化QEventTransition。
- QFinalState类的使用。
- QEvent::StateMachineWrapped用法
4.4 twowaybutton
该工程存放在Qt安装目录下的
Examples\Qt-5.14.1\widgets\statemachine\twowaybutton
这个例子是通过状态机及状态类实现了按钮文字on、off切换。通过本例子,要学习到:
- QStateMachine、QState类的使用及关系。
5 widgets\graphicsview
本大节展示了Qt场景、视图、图形项技术点。要用到Qt Graphics View Framework框架。详细的内容请在Qt Assistant 的搜索页签中输入Graphics View Framework进行查看。
5.1 anchorlayout
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\graphicsview\anchorlayout
本工程展示了QGraphicsProxyWidget、QGraphicsAnchorLayout用法。利用QGraphicsProxyWidget在场景视图中创建显示QWidget对象,然后利用QGraphicsAnchorLayout对这些创建的QWidget对象进行布局排列。
5.2 basicgraphicslayouts
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\graphicsview\basicgraphicslayouts
本工程展示了如下技术点:
- QGraphicsLinearLayout布局器用法。
- 如何从QGraphicsLayoutItem派生实现子类。
- 如何从QGraphicsItem派生实现子类。
5.3 chip
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\graphicsview\chip
本工程展示了如下技术点:
- 如何子类化QGraphicsView。
- 如何对QGraphicsView视图缩放、旋转、平移、重置。
- QGraphicsView和QGraphicsScene如何互动。
- 在QGraphicsScene中添加QGraphicsItem及相互之间的互动。
- 如何子类化、自定义QGraphicsItem、拖动、选择。
- 根据QGraphicsItem不同的缩放率,在QGraphicsItem表面绘制不同内容。
- 利用levelOfDetailFromTransform函数获取QGraphicsItem不同缩放率的用法。
- 掌握QGraphicsItem的风格类相关函数、对象使用,如:QStyleOptionGraphicsItem。
- 如何利用QVarLengthArray在栈上声明一个定长数组。
5.4 collidingmice
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\graphicsview\collidingmice
本工程通过场景、视图、项框架画出7个小老鼠,并结合定时器使这7个小老鼠在场景中不停运动,实现老鼠动画效果。展示了如下技术点:
- 场景、视图、项交互。
- setItemIndexMethod函数参数GraphicsScene::NoIndex、GraphicsScene::BspTreeIndex的区别。前者对场景中动画项、经常移动的项效率比后者高。
- 当视图背景是图片时,利用视图的setCacheMode方法设置缓冲参数为QGraphicsView::CacheBackground,可以提高效率。
- 视图其它参数设置。
- QGraphicsScen类的advance函数和QGraphicsItem的advance函数的关系。如何利用QGraphicsItem的advance函数实现项动画。
- 本工程中老鼠各个器官的形状是在paint函数画出来的。
- 本工程涉及到了一些数学知识,看懂需要基本数学基础,如:高中的三角函数等。
本工程具体分析,参见《Colliding Mice碰撞老鼠工程分析》。
5.5 diagramscene
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\graphicsview\diagramscene
本工程实现了类似miscrosoft visio 软件的流程图组件。从本工程中要学到如下知识点:
- 场景、视图、项如何交互。
- 如何自定义QGraphicsTextItem、QGraphicsPolygonItem。
- 项的一些标志设定,如:ItemIsSelectable、ItemIsMovable、ItemSendsGeometryChanges。
- 检测项的选择、选中、碰撞、相交等。
- 文本TextInteractionFlag各个枚举值的含义。
- QToolBox类使用。
- QFontComboBox字体组合框的使用。
- QIntValidator使用。
本工程中有几个难点,具体参见《diagramscene工程难点分析》博文。
5.6 dragdroprobot
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\graphicsview\dragdroprobot
本工程实现一个机器人和围绕机器人一圈的随机颜色圆形item。通过按住鼠标左键对圆形item进行拖动,拖动到机器人的部位上时,机器人该部位颜色就能变为该圆形item的颜色。如果是拖动到机器人头部,且运气好的话,还能将机器人的头部换成真实人头像。从本工程中要学到如下知识点:
- 场景、视图、项如何交互。
- 如何自定义QGraphicsItem。
- 设置Qt::ItemHasNoContents标志,使QGraphicsItem的paint不被Qt调用,这样对没有任何内容需要绘制的情况下,避免Qt每次调用paint函数,从而提高效率。
- QGraphicsItem的mousePressEvent、mouseMoveEvent、mouseReleaseEvent事件使用,特别是这事件中的参数QGraphicsSceneMouseEvent的理解。
- 动画框架QParallelAnimationGroup、QPropertyAnimation的使用。这几个动画类请参见Qt Assist中的“The Animation Framework”的描述。
- QDrag、QMimeData拖放类、拖放技术的应用。
- QGraphicsItem的dragEnterEvent、dragLeaveEvent、dropEvent事件使用。
- QApplication::startDragDistance()函数的理解。
5.8 elasticnodes
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\graphicsview\elasticnodes
本工程实现弹性节点示例。演示如何使用基本交互在图形中实现节点之间的边。您可以单击以拖动节点,并使用鼠标滚轮或键盘放大和缩小。点击空格键将随机化节点。该示例也是独立于分辨率的;放大时,图形仍然清晰。
从本工程中要学到如下知识点:
- 场景、视图、项如何交互。
- 如何自定义QGraphicsItem。
- 视图QGraphicsView类drawBackground方法调用时机和用法。
- 视图QGraphicsViewd类放大、缩小。
- QGraphicsItem类的Qt::ItemIsMovable、Qt::ItemSendsGeometryChanges、Qt::DeviceCoordinateCache标志含义及用法。
- QGraphicsItem类的itemChange函数的激发、调用条件。
- setAcceptedMouseButtons函数用法。
- 程序中用到std::atan2求反正切的函数,这个函数的用法,请参见《C++中反正切atan2(y,x)与atan(x)的区别》博文。
- startTimer启动定时器及定时器响应函数timerEvent用法。关于Qt三个定时器的区别,请参见
《Qt定时器QBasicTimer、startTimer、QTimer使用总结》。
本工程的难点是Node类的calculateForces()函数,该函数用到物理的推拉力计算原理。本工程的具体分析,参见《官方例程elasticnodes解析》博文。
5.9 embeddeddialogs
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\graphicsview\embeddeddialogs
本工程实现在场景中插入100个窗体部件(QGraphicsProxyWidget对象)。当鼠标在某个窗体部件对象上悬浮、移走时,利用QTimeLine对象使该窗体对象做微小的平移、转动、缩放,给人呈现出一种动画效果。从本工程中需要学到以下知识点:
- QGraphicsProxyWidget类的使用、如何从该类派生出子类。
- 场景视图的使用。
- QTimeLine类用法。
- QGraphicsProxyWidget类的paintWindowFrame函数的作用。
- QGraphicsProxyWidget类的sceneEventFilter、installSceneEventFilter函数的用法。这两个函数类似QObject的installEventFilter、eventFilter函数,可以参考
《installEventFilter、eventFilter函数理解》进行类比学习。
5.10 flowlayout_graphicsview
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\graphicsview\flowlayout_graphicsview
本工程通过QGraphicsProxyWidget,将一个字符串作为QLabel的文本插入到场景,并通过自定义的QGraphicsLayout布局器来布局这些文本QGraphicsProxyWidget表示的item对象。通过本工程要学习到如下知识点:
- 场景视图的使用。
- QGraphicsProxyWidget类的使用。
- 如何从QGraphicsLayout类派生、自定义自己的布局器。
- QStringRef类的使用。
5.11 padnavigator
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\graphicsview\padnavigator
本工程实现类似pad平板电脑app导航功能。点击键盘不同的键,以动画方式导航到不同界面。从本工程要学到如下知识点:
- 利用QGraphicsRotation类和QGraphicsItem类的setTransformations方法实现绕任意轴的插值旋转。
- QGraphicsProxyWidget用法。
- QPropertyAnimation、QParallelAnimationGroup、QSequentialAnimationGroup类实现动画。这几个类更多示例请参见第3节中的widgets\animation部分。
- QEventTransition、QStateMachine、QState、QHistoryState状态机及状态变换有关类用法。这几个类更多示例请参见第4节中的widgets\statemachine部分。
- 场景、视图、项的交互。
5.12.simpleanchorlayout
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\graphicsview\simpleanchorlayout
本工程演示如何利用QGraphicsAnchorLayout对QGraphicsWidget类对象进行布局。从本工程要掌握如下知识点:
- QGraphicsAnchorLayout用法,如何利用该类对场景中的item进行布局。
- 如何子类化QGraphicsWidget。
- 场景、视图、项的交互。
5.13.weatheranchorlayout
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\graphicsview\weatheranchorlayout
本工程实现天气牧场画面,通过QGraphicsAnchorLayout、QGraphicsAnchor进行布局。通过本工程需要掌握如下知识点:
- QGraphicsAnchor类用法。
- QGraphicsAnchorLayout用法。
- 利用QGraphicsAnchorLayout、QGraphicsAnchor对场景中item进行布局。
- 如何子类化QGraphicsLayoutItem类。
- 如何子类化QGraphicsWidget类。
- QPainter类CompositionMode各个枚举值的用法,具体参见《QPainter类的CompositionMode各值含义》博文。
6. speech
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\speech
本工程实现语音播报功能。在编辑框中输入你想播报的内容文字,就调用本地计算机的声卡将内容播报出来。这在很多场合很实用,如:公交报站、产品讲解。从本工程需要掌握如下知识点:
- 利用QTextToSpeech类实现语音播报。
- QLoggingCategory用法。
该工程的具体分析参见《Qt的QTextToSpeech类实现语音播报功能》博文。
由于Qt官方自带的例子很多,一下看不完,每看完一个例子,记录一个。未完,待续!