qml如何实现鼠标滑动突出显示效果

1 篇文章 0 订阅
1 篇文章 0 订阅

目录

 


前言

 

最近一段时间在用qml写客户端程序,做UI是真的好用,感觉比QT widget顺手。不过我也是新手,用什么学什么。

毕业一晃眼好多年了,从只会C/C++,陆陆续续接触java、oc、lua、js、python,没有特别精通的,但是基本都了解,搞个程序出来是没问题的。

写代码真的是一通百通的,理解了原理就好,要想完全精通,真的要多练多看了。

 

一、qml如何实现鼠标滑动放大效果

最近在优化UI,想实现鼠标悬浮后突出显示鼠标指向的数据内容,没有找到好的示例,自己造一个,效果大概是这样

二、思路

监测鼠标焦点,用一个大的rectangle遮罩住当前鼠标指向的字符,原理是这样,想做成其他效果,应该都是一样的,微调一下就行了


三、代码

直接上代码,一看就明白

//LabelListView.qml
import QtQuick 2.13

Rectangle
{
    id:idColorbtn
    property alias itemName: idBtnName.text

    property int itemNum: itemName.length/4 //内部计算得出每个项占多少个像素,一个项目有4个字符,如"A:  "
    property int itemLeftMargin: 0
    property int itemCurSelPos: 0 //当前是第几项
    color:"#171B27"
    height: idBtnName.contentHeight
    width: idBtnName.contentWidth
    Text {
        id: idBtnName
        anchors.fill:parent
        text: itemName
        font.pixelSize: 18
        font.weight: Font.Medium
        color: "#CECECE"
        verticalAlignment: Text.AlignVCenter
    }
    Rectangle{
        id:idMark
        visible: itemNum!==0?true:false
        width: {if(itemNum!==0)idBtnName.contentWidth/(2*itemNum)}
        height: idBtnName.contentHeight
        anchors.top:parent.top;
        anchors.bottom:parent.bottom;
        color: parent.color
        z:1
        x:itemLeftMargin
        Text {
            id:idMarkText
            anchors.fill:parent
            text: itemName.charAt(itemCurSelPos*4)
            font.pixelSize: 26
            font.weight: Font.ExtraBold
            color: Qt.lighter("#CECECE")
            verticalAlignment: Text.AlignVCenter
        }
    }
    MouseArea
    {
        anchors.fill: parent
        hoverEnabled: true
        acceptedButtons: Qt.LeftButton
        onPositionChanged:{
            //mouse
            var itemLenth = (idBtnName.contentWidth/itemNum)
            if(itemNum!==0){
                var npos = parseInt((mouse.x)/itemLenth)
                if(npos<itemNum){
                    idColorbtn.itemLeftMargin = parseInt(npos*itemLenth)
                    itemCurSelPos = npos
                }
            }
        }
    }
}

调用:main.qml

import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
    color: "#171B27"
    LabelListView{
        id: idLogLabel
        itemName:"A   B   C   D   "
        anchors.centerIn: parent
        onItemCurSelPosChanged: {
            //检测鼠标焦点,自动更新信息
            switch(idLogLabel.itemCurSelPos){
            case 0:
                idRectColor.color="red"
                break;
            case 1:
                idRectColor.color="green"
                break;
            case 2:
                idRectColor.color="black"
                break;
            case 3:
            default:
                idRectColor.color="white"
                break;
            }
        }
    }
    Rectangle{
        id:idRectColor
        anchors.bottom: idLogLabel.top
        anchors.bottomMargin: 80
        anchors.horizontalCenter: parent.horizontalCenter
        width: 80
        height: 80
        color: "white"
    }
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

poet_lj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值