Qt实例分析——C++自定义类型的属性在QML的使用
2014-08-28 14:19
1031 查看
这个例子则向我们演示了如何为这个PieChart添加自定义类型的属性。使用自定义类型的属性,更方便我们模块化编程。
这个项目中多了一个pieslice类,它用于饼状图的实际绘制,而PieChart仅用来提供框架:
piechart.h:
将具体绘制放在一个单独的类中,pieslice.h:
这个项目中多了一个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] #endifpiechart.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] #endifpieslice.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.0 import QtQuick 2.0 Item { 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]
相关文章推荐
- Qt实例分析——QML调用的C++类型添加自定义类型的属性列表
- Qt实例分析——C++定义的类创建为供QML使用的插件
- QML之使用C++自定义QML类型(三)
- Qt QML 入门 — 使用C++定义QML类型
- Qt实例分析——QML调用C++方法, C++调用QML
- QML之QML之使用C++自定义QML类型(二)
- QML之使用C++自定义QML类型(一)
- Qt实例分析——QML属性绑定
- 在Qt中创建属性表的步骤(这是使用各个类型不同的PropertyManager)
- 一个使用c++在lua中创建自定义数据类型的简易方法
- 如何在Qt中使用自定义数据类型
- C++ STL map中的Key使用自定义类型
- i++ 和 ++i 效率的分析以及自定义类型的自增/自减运算符重载实例
- Qt使用自定义类型信号槽注册问题
- 如何在Qt中使用自定义数据类型
- [QT]QT 教程之实例分析[十] 文件属性查看器(QFileInfo)
- i++ 和 ++i 效率的分析以及自定义类型的自增/自减运算符重载实例
- C++中set,map使用自定义类型
- 急!delphi中variant能否和object类型转换。实例:在使用getpropvalue(range,'属性')时提示类型有错,如何解决?!!
- i++ 和 ++i 效率的分析以及自定义类型的自增/自减运算符重载实例