演示如何使用Qt框架实现基于QPainter的自定义场景图项。
绘制项示例演示如何使用QML场景图框架使用QPainter实现自定义场景图项。
PythonGUI设计PyQt5从入门到实践(全彩版)赠纸质专属魔卡、PPT课件京东月销量旗舰店¥79.56购买QQuickPaintedItem类是从QQuickItem派生的类,用于使用QPainter接口实现自定义QML场景图形项。
该示例包括项目类、插件类和QML文件,以使用此插件。该类表示扩展QQuickPaintedItem的单个文本气球,该类表示QtQuick插件的骨架代码,文件用于加载插件并显示文本气球。TextBalloonTextBalloonPlugintextballoons.qml
我们将重点介绍类第一,并继续文件。有关如何实现Qt快速插件的示例,请查看编写扩展插件TextBalloontextballoons.qml
Qt5.12实战京东好评率94%无理由退换京东配送官方店旗舰店¥.1购买文本气球类声明
该类继承自QQuickPaintedItem。QQuickPaintedItem是QML场景图框架中所有基于QPainter项的基类。TextBalloon
classTextBalloon:publicQQuickPaintedItem{Q_OBJECTQ_PROPERTY(boolrightAlignedREADisRightAlignedWRITEsetRightAlignedNOTIFYrightAlignedChanged)QML_ELEMENTpublic:TextBalloon(QQuickItem*parent=0);voidpaint(QPainter*painter);boolisRightAligned();voidsetRightAligned(boolrightAligned);private:boolrightAligned;signals:voidrightAlignedChanged();};
要实现QQuickPaintedItem,您必须实现QQuickPaintedIem的纯虚拟函数画(),该画实现了类型的绘制。
QtQuick核心编程安晓辉编京东¥.5购买已下架文本气球类定义
我们必须确保为TextBalloon项初始化正确的对齐属性。
TextBalloon::TextBalloon(QQuickItem*parent):QQuickPaintedItem(parent),rightAligned(false){}
然后,我们实现由场景图框架自动调用的函数来绘制项目的内容。函数在局部坐标中绘制项。paint()
voidTextBalloon::paint(QPainter*painter){QBrushbrush(QColor(#));painter-setBrush(brush);painter-setPen(Qt::NoPen);painter-setRenderHint(QPainter::Antialiasing);QSizeFitemSize=size();painter-drawRoundedRect(0,0,itemSize.width(),itemSize.height()-10,10,10);if(rightAligned){constQPointFpoints[3]={QPointF(itemSize.width()-10.0,itemSize.height()-10.0),QPointF(itemSize.width()-20.0,itemSize.height()),QPointF(itemSize.width()-30.0,itemSize.height()-10.0),};painter-drawConvexPolygon(points,3);}else{constQPointFpoints[3]={QPointF(10.0,itemSize.height()-10.0),QPointF(20.0,itemSize.height()),QPointF(30.0,itemSize.height()-10.0),};painter-drawConvexPolygon(points,3);}}
我们从设置笔和笔刷开始定义项目的外观。之后我们开始绘图。请注意,根据项目的大小调用内容BoundingRect()项进行绘制。内容BoundingRect()函数返回的矩形是QML文件中定义的项的大小。
Qt5.9C++开发指南(异步图书出品)京东月销量好评率98%无理由退换京东配送¥89购买文本气球.qml文件
接口由两个主要部分组成。带文本气球和控件按钮的可滚动区域以添加新气球。
气球视图
ListModel{id:balloonModelListElement{balloonWidth:}ListElement{balloonWidth:}}ListView{anchors.bottom:controls.topanchors.bottomMargin:2anchors.top:parent.topid:balloonViewdelegate:TextBalloon{anchors.right:index%2==0?undefined:parent.rightheight:60rightAligned:index%2==0?false:truewidth:balloonWidth}model:balloonModelspacing:5width:parent.width}
气球模型包含两种类型在应用程序开始,将由气球视图显示。气球视图在左对齐和右对齐之间对TextBalloon委托项进行分门不行。
PythonQtGUI与数据可视化编程(异步图书出品)京东月销量好评率99%无理由退换京东配送¥99购买控制
Rectangle{id:controlsanchors.bottom:parent.bottomanchors.left:parent.leftanchors.margins:1anchors.right:parent.rightborder.width:2color:whiteheight:parent.height*0.15Text{anchors.centerIn:parenttext:Addanotherballoon}MouseArea{anchors.fill:parenthoverEnabled:trueonClicked:{balloonModel.append({balloonWidth:Math.floor(Math.random()*+)})balloonView.positionViewAtIndex(balloonView.count-1,ListView.End)}onEntered:{parent.color=#8ac}onExited:{parent.color=white}}}
UI的控件部分包含一个带MouseArea的矩形,当鼠标悬停在鼠标悬停在它上方时,该矩形会更改颜色。此控件按钮将新对象添加到具有随机宽度的模型末尾。
Qt创建基于Widget小部件的应用程序
Qt6对Concurrent并发模块的更新
C++Qt框架Concurrent并发模块使用方法
Qt框架流布局QFlowlayout使用实例
Qt6中网络模块的最新更新和修改,以及未来可能的发展方向
#Qt#
转载请注明:http://www.0431gb208.com/sjszjzl/2472.html