gpt4 book ai didi

qt - 如何在不禁用整个控件的情况下禁用 TextArea 的鼠标滚轮?

转载 作者:行者123 更新时间:2023-12-04 13:11:35 25 4
gpt4 key购买 nike

我正在使用 TextArea显示带有嵌入的多行文本 <IMG ...>代表 ListView 的标签.我将它设置为只读(而不是禁用),因为我需要文本中的超链接可以点击,所以我需要使用它的 onLinkActivated事件处理程序。这通常需要 Label (不处理鼠标滚轮事件),而是一个 Label当文本包含 <IMG ...> 时,不会正确呈现换行符HTML 中的标签。

我遇到的问题是 TextArea即使它是只读的也处理鼠标滚轮事件,所以如果光标碰巧位于可见的 TextArea 之一上控件,ListView不会响应鼠标滚轮事件(因此它不会滚动)。换句话说,TextArea正在捕获鼠标滚轮事件,我希望它不要这样做。

我在文档中看到控件有一个 wheelEnabled:属性(property),但 TextArea似乎不支持这一点。

更新:这是演示问题的最小代码示例:

import QtQuick.Controls 1.4 as Controls

Rectangle {

id: test

color: "white"
width: 300
anchors {
left: parent.left
top: parent.top
bottom: parent.bottom
}

Controls.ScrollView {

id: _scrollview

anchors.fill: parent

ListView {
anchors.fill: parent
model: 100

delegate: Rectangle {
id: tableRow
width: test.width
height: 50
color: "yellow"

TextArea {
width: test.width / 2
height: tableRow.height
readOnly: true
text: "Row # " + index
}

}

}

}

}

如果您将鼠标光标悬停在此 ListView 的右侧(即不在行中的 TextArea 控件上方),鼠标滚轮将按预期工作。但是,如果您将鼠标光标悬停在 TextArea 上在任何一行中, ListView不会随鼠标滚轮滚动(因为只读 TextView 正在捕获事件)。

最佳答案

这实际上很容易,可惜我浪费了赏金。所有这一切都需要一个 MouseArea位于 TextArea 上方像这样:

MouseArea {
anchors.fill: txtTester
onPressed: {
mouse.accepted = false
}
onReleased: {
mouse.accepted = false
}

property int scrollValue: 15
onWheel: {
if (wheel.angleDelta.y < 0) {
//make sure not to scroll too far
if (!_scrollview.flickableItem.atYEnd)
_scrollview.flickableItem.contentY += scrollValue
}
else {
//make sure not to scroll too far
if (!_scrollview.flickableItem.atYBeginning)
_scrollview.flickableItem.contentY -= scrollValue
}
}
}

这会忽略按下和释放事件,因此单击 TextArea 中的超链接仍然有效,但它会拦截鼠标滚轮事件并将它们应用于移动 ScrollView好像 TextArea 不存在一样。

关于qt - 如何在不禁用整个控件的情况下禁用 TextArea 的鼠标滚轮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52544548/

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