qml中使用combobox实现多级菜单_QML 实现多态

0ec8bd2e36491d02bb8dcd551a737dcf.png
阅读本文大概需要3分钟

我们在C++中经常使用多继承的方式进行开发,那么到了QML这里,是否也可以使用多继承呢,答案是肯定的。

原理

QML中实现多态,主要是一些公共组件的继承和一些方法的重写,不像C++中那样,我们在派生类中重写某个虚函数时也可以调用基类的方法,在QML则不可以,这也是解释型语言的弱点吧,但是从迭代、高效率开发上来说已经很棒了。

小试牛刀

首先编写基类

比如这里以 baseMainFrame.qml为例,放置一个按钮,默认初始隐藏不显示

baseMainFrame.qml

import QtQuick 2.0
import QtQuick.Controls 1.4
Item {

    id: _baseMainFrame
    anchors.fill: parent;
    Button
    {
        id: m_btnTest
        visible: false;
        width: 40
        height: 20
        text: "text"
        onClicked: {
            console.log("clicked..")
        }
    }
    function updateInfo(){}
}

编写派生类

在派生类中,我们在它的构造函数中初始化基类按钮,让它显示出来

mainFrame.qml

import QtQuick 2.0

BaseMainFrame {
    id: mainframe

    width: parent.width
    height: parent.height

    Component.onCompleted: {
        m_btnTest.visible = true;
    }
}

调用

最后我们在Main.qml中来调用

Main.qml

import QtQuick 2.13
import QtQuick.Window 2.0

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("LQTest");
    MainFrame{
        anchors.fill: parent;
    }
}

效果

编写完成后直接运行该QML,意料之中基类成员不识别

01d4137dbc1ff7378e5da376c95a75fc.png

也就是说,派生类中不能直接访问基类子对象。为了解决这个问题,我们可以在基类中给对应的子对象起别名。

property alias m_btnUpdate : m_btnTest;

基类完整代码如下

import QtQuick 2.0
import QtQuick.Controls 1.4

Item {
    id: _baseMainFrame
    anchors.fill: parent;
    property alias m_btnUpdate : m_btnTest;
    Button
    {
        id: m_btnTest
        visible: false;
        width: 40
        height: 20
        text: "text"
        onClicked: {
            console.log("clicked..")
        }
    }
    function updateInfo(){}
}

惊喜时刻,程序运行结果和自己预想的一致

ae82b55ee70bf59ab018921bc362abdf.png

其他

本次只演示了继承组件,其中基类中的某个方法也是可以继承和重写的。比如本次示例积累中的updateInfo() 方法也可以在派生类中重新实现。

总结

总结下,QML中使用多态进行继承时,注意在派生类中要访问基类的子对象时,不能直接通过子对象名访问,而要通过别名访问。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值