gpt4 book ai didi

qt - 如何将鼠标滚轮滚动添加到垂直滚动条和滚动区域?

转载 作者:行者123 更新时间:2023-12-04 08:51:19 31 4
gpt4 key购买 nike

这是我几个月来第一次再次接触 QML(我主要是 C++ 后端/算法开发人员)为某种调度算法编写一个小型前端

  • 我对 QML 模型/属性/项目系统和 javascript 交互有很好的了解
  • 我爱上了 QML 功能,因为它能够构建一个工作/生活前端,甚至无需接触 C++ :)
  • 当谈到结合深度嵌套的矩形/ ListView / ScrollView 的所有可能解决方案以及从快速 1 到快速 2 的所有(延迟)更改时,我几乎感到无助

  • 这是我肮脏的 QtQuick 1.1 图表原型(prototype) - 了解我想要达到的目标
  • main.qml: https://pastebin.com/ZURZbVeB
  • 任务模拟.qml:https://pastebin.com/LwivsCnT

  • enter image description here
  • 左侧是任务名称列表
  • 右侧是显示任务事件的典型甘特图范围
  • 绿线是由模拟触发的时间轴
  • 该示例包含一个基于计时器的模拟,其中包含固定数量的任务模拟(无限)事件

  • 甘特图的架构/要求:
    enter image description here
  • 任务名称可以大于 150 - 那么名称
  • 应该会出现底部 hscrollbar
  • 范围可以大于 400 - 然后应该为范围
  • 出现底部 hscrollbar
  • 当任务高度 > 500 时,右侧的 vscrollbar 应出现,应将任务名称和范围一起滚动
  • 垂直滚动应该使用鼠标滚轮
  • 没有弹跳

  • 这是我目前准备好一切的干净迷你测试
    enter image description here
    我的彩虹.gml
    import QtQuick 2.15
    import QtQuick.Controls 2.15
    import QtGraphicalEffects 1.0

    Item{
    id: myApp

    height: 600
    width: 600

    Item {
    id: ganttChart
    width: 400
    height: 400
    anchors.centerIn: parent
    clip: true

    property real taskNamesWidth: 100

    // runtime
    property real myContentHeight: 2 * ganttChart.height
    property real mytaskNamesContentWidth: 200
    property real myTaskRangesContentWidth: 500

    component FillRainbowGradient : LinearGradient
    {
    anchors.fill: parent
    start: Qt.point(0, 0)
    end: Qt.point(parent.width, parent.height)
    gradient: Gradient {
    GradientStop { position: 0.000; color: Qt.rgba(1, 0, 0, 1) }
    GradientStop { position: 0.167; color: Qt.rgba(1, 1, 0, 1) }
    GradientStop { position: 0.333; color: Qt.rgba(0, 1, 0, 1) }
    GradientStop { position: 0.500; color: Qt.rgba(0, 1, 1, 1) }
    GradientStop { position: 0.667; color: Qt.rgba(0, 0, 1, 1) }
    GradientStop { position: 0.833; color: Qt.rgba(1, 0, 1, 1) }
    GradientStop { position: 1.000; color: Qt.rgba(1, 0, 0, 1) }
    }
    }

    Row
    {
    height: parent.height
    width: parent.width

    Item
    {
    id: taskNames
    width: ganttChart.taskNamesWidth
    height: parent.height
    clip: true

    Rectangle
    {
    id: taskNamesContent
    width: ganttChart.mytaskNamesContentWidth
    height: ganttChart.myContentHeight

    FillRainbowGradient {}

    x: -hbarTaskNames.position * width
    y: -vbar.position * height
    }

    ScrollBar {
    id: hbarTaskNames
    hoverEnabled: true
    active: hovered || pressed
    orientation: Qt.Horizontal
    size: taskNames.width / taskNamesContent.width
    anchors.left: parent.left
    anchors.right: parent.right
    anchors.bottom: parent.bottom
    }
    }

    Item
    {
    id: taskRanges
    width: parent.width - taskNames.width
    height: parent.height
    clip: true

    Rectangle
    {
    id: taskRangesContent
    width: ganttChart.myTaskRangesContentWidth
    height: ganttChart.myContentHeight

    FillRainbowGradient {}

    x: -hbarTaskRanges.position * width
    y: -vbar.position * height
    }

    ScrollBar {
    id: hbarTaskRanges
    hoverEnabled: true
    active: hovered || pressed
    orientation: Qt.Horizontal
    size: taskRanges.width / taskRangesContent.width
    anchors.left: parent.left
    anchors.right: parent.right
    anchors.bottom: parent.bottom
    }
    }
    }

    ScrollBar {
    id: vbar
    hoverEnabled: true
    active: hovered || pressed
    orientation: Qt.Vertical
    size: ganttChart.height / ganttChart.myContentHeight
    anchors.top: parent.top
    anchors.right: parent.right
    anchors.bottom: parent.bottom
    }
    }
    }
    问题:
    允许使用鼠标滚轮进行垂直滚动需要什么?
    我需要为此使用 ScrollViews 或 ListView 还是有办法附加 MouseHandler?
    感谢您的帮助和提示

    最佳答案

    您可以使用 MouseArea .
    将其放在甘特图上方并使用 wheel 滚动垂直滚动条的信号。

    您的代码可能如下所示:

    MouseArea {
    anchors.fill: ganttChart

    onWheel: {
    if (wheel.angleDelta.y > 0) {
    vbar.decrease()
    }
    else {
    vbar.increase()
    }
    }
    }

    关于qt - 如何将鼠标滚轮滚动添加到垂直滚动条和滚动区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64087835/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com