QML和C++混合编程--(二)

QML和C++混合编程–(二)之QML连接C++方法和信号

简介:

在上一篇中,我们讲到PieChart类的自定义,并且将该图形显示出来。本篇我们在QML中添加“ "clearChart()"方法,使能能够删除图形。
效果如下:

在这里插入图片描述

一、修改app.qml 文件

那么首先我们需要在app.qml中能够调用clearChart() 方法,并且接收chartCleared()信号。

修改代码如下:

 import Charts 1.0
 import QtQuick 2.0

 Item {
     width: 300; height: 200

     PieChart {
         id: aPieChart
         anchors.centerIn: parent
         width: 100; height: 100
         color: "red"

         onChartCleared: console.log("The chart has been cleared")
     }

     MouseArea {
         anchors.fill: parent
         onClicked: aPieChart.clearChart()
     }

     Text {
         anchors { bottom: parent.bottom; horizontalCenter: parent.horizontalCenter; bottomMargin: 20 }
         text: "Click anywhere to clear the chart"
     }
 }

二、修改c++中的类

我们在c++ 类中添加clearChart()方法和chartCleared() 信号

 class PieChart : public QQuickPaintedItem
 {
     ...
 public:
     ...
     Q_INVOKABLE void clearChart();

 signals:
     void chartCleared();
     ...
 };

这里,因为是Qt Meta-Object system,,我们用到Q_INVOKABLE来使得clearChart()方法可用。

当然,在QML中 可声明为槽也是可行的。这两种方法都是行得通的。

要clearChart() 方法很简单,只需要将color设置为Qt::transparent,然后重绘chart,然后再发送chartCleared()信号:

 void PieChart::clearChart()
 {
     setColor(QColor(Qt::transparent));
     update();

     emit chartCleared();
 }

现在,我们来运行下应用程序,单击窗体,可以看到pie chart 消失了,且应用程序输出了一串文本消息:
qml: The chart has been cleared

本篇翻译自Qt 的官方文档
Writing QML Extensions with C++ 之 Chapter2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值