QML 实现导航栏 类似于TabBar

31 篇文章 10 订阅

这里写图片描述

利用QML实现导航栏的功能。可以自己修改相关的样式,实现完全的自定制。

代码如下
BaseButton.qml

import QtQuick 2.6
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import QtGraphicalEffects 1.0

Rectangle{
    id : navigrect;
    property string mtextstr: "text"
    function noclicked()
    {
        p1text.color = "#00CCFF";
        p1text.font.bold = false;
        navigrect.color = "#00498C";
        //navigrect.color
    }
    function onSelected()
    {
        p1text.color = "white";
        p1text.font.bold = true;
        navigrect.color = "#1B96D1";

    }

    x:1;
    anchors.verticalCenter : parent.verticalCenter
    width: parent.pbwidth;height: parent.pbheight
    radius: 8
    color: "#00498C"
    border.color: "#06E4F3"
    Text {
        id : p1text
        anchors.centerIn : parent
        color: "#00CCFF"
        text: mtextstr

    }
    Behavior on color{
            PropertyAnimation{duration: 1000}
        }

    // color:curindex==3?GColor.浅绿色["500"]:GColor.浅蓝色["500"]
}




MButton.qml

import QtQuick 2.6
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import QtGraphicalEffects 1.0

Rectangle{
    id : navigationrect
    x: 100 ; y:100;
    width: 200 ; height: 50;
    color: "#052641"
    border.color: "#00498C"

    function setDefeat()
    {
        p1.noclicked();
        p2.noclicked();
        p3.noclicked();
        p4.noclicked();
        p5.noclicked();

    }
    property int pbwidth: 100
    property int pbheight: height-6
    property int index: 0

    signal buttonclicked(int index);
    signal buttonclickedStr(string textstr);

    BaseButton{
        id:p1;
        mtextstr: "你好"
        MouseArea
        {
            anchors.fill: parent;
            onClicked: {
               setDefeat();
               index = 0; 
               parent.onSelected();
               buttonclicked(index);
               buttonclickedStr(parent.mtextstr);
            }
        }
    }
    BaseButton{
        id:p2
        x: pbwidth
        MouseArea
        {
            anchors.fill: parent;
            onClicked: {
                setDefeat();
                index = 1;   
               parent.onSelected();
               buttonclicked(index);
               buttonclickedStr(parent.mtextstr);
            }
        }
    }

    BaseButton{
        id:p3
        x: pbwidth*2
        MouseArea
        {
            anchors.fill: parent;
            onClicked: {
               setDefeat();
               index = 2; 
               parent.onSelected();
               buttonclicked(index);
               buttonclickedStr(parent.mtextstr);
            }
        }
    }

    BaseButton{
        id:p4
        x: pbwidth*3
        MouseArea
        {
            anchors.fill: parent;
            onClicked: {
               setDefeat();
               index = 3;
               parent.onSelected();
               buttonclicked(index);
               buttonclickedStr(parent.mtextstr);
            }
        }
    }
    BaseButton{
        id:p5
        x: pbwidth*4
        MouseArea
        {
            anchors.fill: parent;
            onClicked: {
               setDefeat();
               index = 4;
               parent.onSelected();
               buttonclicked(index);
               buttonclickedStr(parent.mtextstr);
            }
        }
    }

    Rectangle
    {
        id : bottomrect
        color: "yellow";
        width: pbwidth-1; height: 2
        y:pbheight+2;
        x:index*pbwidth
        Behavior on x{
                PropertyAnimation{duration: 500}
            }
    }
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值