滑块上的 QML 性能

Posted

技术标签:

【中文标题】滑块上的 QML 性能【英文标题】:QML performance on sliders 【发布时间】:2019-11-10 23:11:08 【问题描述】:

嗯.. 我在我的应用程序中通过中继器放置了 22 个这样的滑块元素。移动滑块非常抖动和生涩,这是在我笔记本电脑上的 nvidia gpu 上。这在集成显卡上更流畅。有什么明显可以改进的地方吗?我对 Qt 还很陌生,所以这对我来说是一个难题..

import QtQuick 2.0
import QtQuick.Controls 2.2

Item 
    height: 4*82
    width: 82


    Rectangle 
        height: 4*82
        width: 83.55
        color: "#0a0a0a"
        border.color: "#80cccccc"
        Rectangle 
            width: 83.55
            height: 22
            color: "#0a0a0a"
            border.color: "#80cccccc"
            y:parent.y -22

            Label 
                x:parent.x+parent.width/2 - width/2
                y:5
                id: name
                text: qsTr("MASTER EFX SP")
                color: slider.value > 0 ? "#6eaf71" : "#3c3c3c"
                font.pixelSize: 10
            
        



    


    Slider 
        id: slider
        from: 0
        to: 255
        value: 0
        orientation: Qt.Vertical
        height: (4*82)-32
        width: 83.55
        y: 16
        stepSize: 1.0

        handle: Item 
            y: parent.topPadding + parent.visualPosition * (parent.availableHeight - 50)
            x: parent.leftPadding + parent.availableWidth / 2 - 30 / 2

            Rectangle 
                color: parent.parent.pressed || parent.parent.value > 0? "#901fdcf5" :  "#90ffffff"
                border.color: parent.parent.pressed  || parent.parent.value > 0? "#1fdcf5" : "gray"
                width: 30
                height: 50
                radius: 2

            
            Rectangle 
                color: parent.parent.pressed || parent.parent.value > 0? "#80000831" : "#4e4e4e"
                width: 30
                height: 2
                y: 50/2-2
            
        

        background: Rectangle 
                x: parent.leftPadding + (horizontal ? 0 : (parent.availableWidth - width) / 2)
                y: parent.topPadding + (horizontal ? (parent.availableHeight - height) / 2 : 0)
                implicitWidth: horizontal ? 200 : 6
                implicitHeight: horizontal ? 6 : 200
                width: horizontal ? parent.availableWidth : implicitWidth
                height: horizontal ? implicitHeight : parent.availableHeight
                radius: 0
                border.color: "#3c3c3c"
                color: "#3c3c3c"
                scale: horizontal && parent.mirrored ? -1 : 1

                readonly property bool horizontal: parent.orientation === Qt.Horizontal
            

    

【问题讨论】:

您运行代码的平台是什么?即使有 56 个控件,您的滑块在我的系统上也能顺利运行。 Thinkpad t570 带专用显卡,win10 【参考方案1】:

首先,尝试了解问题所在 - 毕竟可能不是滑块。 使用 Gammaray 打开您的 Qml 应用程序并检查图形堆栈。

从您粘贴的代码中,我认为 migth 唯一引起问题的是radius 属性,因为这是您的代码正在做的唯一昂贵的事情。

另外,尝试将库导入更新到最新的 qt 版本,您使用的是非常旧的版本,而新版本也可能会提高性能。

【讨论】:

以上是关于滑块上的 QML 性能的主要内容,如果未能解决你的问题,请参考以下文章

滑块上的拇指不动

css 删除soliliquy滑块上的箭头

在 iOS 滑块上,我可以单击刻度上的任意位置还是必须拖动滑块旋钮?

通过jquery滑块发送获取请求并在页面重新加载后保持滑块上的值[重复]

Slick Slider - 在多个滑块上显示计数器

jquery ui滑块-如何反转范围选择