Qt5官方demo解析集18——Chapter 4: Using Custom Property Types
来源:互联网 发布:致得软件 编辑:程序博客网 时间:2024/06/07 03:55
本系列所有文章可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873
接上文Qt5官方demo解析集17——Chapter 3: Adding Property Bindings
在前面的“饼状图”Demo中,我们为这个自定义类型定义了"name"和"color"属性,他们都是基于Qt内置类型"QString"和"QColor",这个例子则向我们演示了如何为这个PieChart添加自定义类型的属性。使用自定义类型的属性,更方便我们模块化编程。
这个项目中多了一个pieslice类,它用于饼状图的实际绘制,而PieChart仅用来提供框架:
piechart.h:
#ifndef PIECHART_H#define PIECHART_H#include <QtQuick/QQuickItem>class PieSlice;//![0]class PieChart : public QQuickItem // 由于这个类不再需要进行实际绘制,所以继承自QQuickItem就可以了{ Q_OBJECT Q_PROPERTY(PieSlice* pieSlice READ pieSlice WRITE setPieSlice) // 我们定义了pieSlice属性,它是一个PieSlice类的指针//![0] Q_PROPERTY(QString name READ name WRITE setName) // color属性被移至PieSlice中//![1]public://![1] PieChart(QQuickItem *parent = 0); QString name() const; void setName(const QString &name);//![2] PieSlice *pieSlice() const; void setPieSlice(PieSlice *pieSlice);//![2]private: QString m_name; PieSlice *m_pieSlice;//![3]};//![3]#endif
piechart.cpp:
#include "piechart.h"#include "pieslice.h"PieChart::PieChart(QQuickItem *parent) : QQuickItem(parent){}QString PieChart::name() const{ return m_name;}void PieChart::setName(const QString &name){ m_name = name;}PieSlice *PieChart::pieSlice() const{ return m_pieSlice;}//![0]void PieChart::setPieSlice(PieSlice *pieSlice) { m_pieSlice = pieSlice; pieSlice->setParentItem(this); // QML的可视化组件必须拥有一个父对象,否则无法显示}//![0]
将具体绘制放在一个单独的类中,pieslice.h:
#ifndef PIESLICE_H#define PIESLICE_H#include <QtQuick/QQuickPaintedItem>#include <QColor>//![0]class PieSlice : public QQuickPaintedItem // 继承这个类以重载Paint{ Q_OBJECT Q_PROPERTY(QColor color READ color WRITE setColor) public: PieSlice(QQuickItem *parent = 0); QColor color() const; void setColor(const QColor &color); void paint(QPainter *painter);private: QColor m_color;};//![0]#endif
pieslice.cpp:
#include "pieslice.h"#include <QPainter>PieSlice::PieSlice(QQuickItem *parent) : QQuickPaintedItem(parent){}QColor PieSlice::color() const{ return m_color;}void PieSlice::setColor(const QColor &color){ m_color = color;}void PieSlice::paint(QPainter *painter){ QPen pen(m_color, 2); painter->setPen(pen); painter->setRenderHints(QPainter::Antialiasing, true); painter->drawPie(boundingRect().adjusted(1, 1, -1, -1), 90 * 16, 290 * 16);}
main.cpp:
#include "piechart.h"#include "pieslice.h"#include <QtQuick/QQuickView>#include <QGuiApplication>//![0]int main(int argc, char *argv[]){//![0] QGuiApplication app(argc, argv); qmlRegisterType<PieChart>("Charts", 1, 0, "PieChart"); // 注册这两个C++类,定义在一个命名空间中//![1] qmlRegisterType<PieSlice>("Charts", 1, 0, "PieSlice");//![1] QQuickView view; view.setResizeMode(QQuickView::SizeRootObjectToView); view.setSource(QUrl("qrc:///app.qml")); view.show(); return app.exec();//![2]}//![2]
app.qml:
import Charts 1.0import QtQuick 2.0Item { width: 300; height: 200 PieChart { id: chart anchors.centerIn: parent width: 100; height: 100 pieSlice: PieSlice { // PieSlice属性的设置 anchors.fill: parent color: "red" } } Component.onCompleted: console.log("The pie is colored " + chart.pieSlice.color) // 最后在组件完成时显示这个饼状图的RGB值}//![0]
0 0
- Qt5官方demo解析集18——Chapter 4: Using Custom Property Types
- Qt5官方demo解析集19——Chapter 5: Using List Property Types
- Qt5官方demo解析集22——Extending QML - Object and List Property Types Example
- Qt5官方demo解析集17——Chapter 3: Adding Property Bindings
- Qt5官方demo解析集21——Extending QML - Adding Types Example
- Qt5官方demo解析集15——Chapter 1: Creating a New Type
- Qt5官方demo解析集16——Chapter 2: Connecting to C++ Methods and Signals
- Qt5官方demo解析集20——Chapter 6: Writing an Extension Plugin
- Qt5官方demo解析集24——Extending QML - Default Property Example
- Qt5官方demo解析集29——Extending QML - Property Value Source Example
- Qt5官方demo解析集6——Loopback Example
- Qt5官方demo解析集31——StocQt
- Qt5官方demo解析集35——Music Player
- Qt5官方demo解析集36——Wiggly Example
- Qt5官方demo解析集36——Wiggly Example
- Qt5官方demo解析集36——Wiggly Example
- Qt5官方demo解析集37——Vector Deformation
- Qt5官方Demo解析集4——Blocking Fortune Client
- 【人脸检测】Haar分类器原理1——矩形特征与积分图
- 详解4字节对齐
- 使用 Spring Security 保护 Web 应用的安全
- 解决微信公众账号申请认证方面的问题
- OCP 1Z0 053 72
- Qt5官方demo解析集18——Chapter 4: Using Custom Property Types
- UVA 465 Overflow 高精度加法和乘法运算
- [Liferay] 异常 :Could not initialize class com.liferay.util.portlet.PortletProps
- Bluez
- spring多数据源的配置(分布式事务管理)
- maven如何使用全教程
- 支持并行数据库的并行结构
- Split
- .net gridview根据时间节点改变字体颜色