如何给垂直滚动条和滚动区域添加鼠标滚轮滚动?
How to add mousewheel scrolling to the vertical scrollbar or scrolled area?
这是我几个月来第一次再次接触 QML(我主要是 C++ backend/alogrithm 开发人员)为某种调度算法编写一个小型前端
- 我对 QML model/property/item 系统和 javascript 交互有很好的理解
- 我爱上了 QML 功能,它甚至不用接触 C++ 就可以构建 working/living 前端 :)
- 当谈到结合深度嵌套的所有可能解决方案时,我感到几乎无能为力 rectangles/listviews/scrollviews 以及从快速 1 到快速 2 的所有(延迟)变化
这是我的肮脏的 QtQuick 1.1 图表原型 - 了解我想要达到的目标
- main.qml: https://pastebin.com/ZURZbVeB
- TaskSimulation.qml: https://pastebin.com/LwivsCnT
- 左边是任务名称列表
- 右侧是显示任务的典型甘特图范围 activity
- 绿线是由模拟触发的时间轴
- 示例包含一个基于计时器的模拟,其中模拟了固定数量的任务(无限)activity
架构 of/requirements 甘特图:
- 任务名称可以大于 150 - 然后应该为名称显示一个底部的滚动条
- 范围可以大于 400 - 然后底部 hscrollbar 应该出现范围
- 右侧的 vscrollbar 应该在任务高度 > 500 时出现,应该一起滚动任务名称和范围
- 垂直滚动应与鼠标滚轮一起使用
- 没有弹跳
这是我目前准备好一切的干净迷你测试
我的rainbows.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 的方法?
感谢您的帮助和提示
这是我几个月来第一次再次接触 QML(我主要是 C++ backend/alogrithm 开发人员)为某种调度算法编写一个小型前端
- 我对 QML model/property/item 系统和 javascript 交互有很好的理解
- 我爱上了 QML 功能,它甚至不用接触 C++ 就可以构建 working/living 前端 :)
- 当谈到结合深度嵌套的所有可能解决方案时,我感到几乎无能为力 rectangles/listviews/scrollviews 以及从快速 1 到快速 2 的所有(延迟)变化
这是我的肮脏的 QtQuick 1.1 图表原型 - 了解我想要达到的目标
- main.qml: https://pastebin.com/ZURZbVeB
- TaskSimulation.qml: https://pastebin.com/LwivsCnT
- 左边是任务名称列表
- 右侧是显示任务的典型甘特图范围 activity
- 绿线是由模拟触发的时间轴
- 示例包含一个基于计时器的模拟,其中模拟了固定数量的任务(无限)activity
架构 of/requirements 甘特图:
- 任务名称可以大于 150 - 然后应该为名称显示一个底部的滚动条
- 范围可以大于 400 - 然后底部 hscrollbar 应该出现范围
- 右侧的 vscrollbar 应该在任务高度 > 500 时出现,应该一起滚动任务名称和范围
- 垂直滚动应与鼠标滚轮一起使用
- 没有弹跳
这是我目前准备好一切的干净迷你测试
我的rainbows.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 的方法?
感谢您的帮助和提示