【发布时间】:2018-09-27 20:18:33
【问题描述】:
我正在使用TextArea 在ListView 的委托中显示带有嵌入<IMG ...> 标记的多行文本。我将其设置为只读(而不是禁用),因为我需要文本中的超链接是可点击的,所以我需要使用它的onLinkActivated 事件处理程序。这通常需要 Label(它不处理鼠标滚轮事件),但当文本在 HTML 中包含 <IMG ...> 标记时,Label 不会正确呈现换行符。
我遇到的问题是 TextArea 处理鼠标滚轮事件,即使它是只读的,所以如果光标恰好位于可见的 TextArea 控件之一上方,ListView 将不会响应鼠标滚轮事件(因此它不会滚动)。换句话说,TextArea 正在捕获鼠标滚轮事件,我希望它不要这样做。
我在文档中看到控件具有 wheelEnabled: 属性,但 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
}
}
}
}
}
如果您将鼠标光标悬停在此列表视图的右侧(即不在行中的 TextArea 控件上),鼠标滚轮将按预期工作。但是,如果您将鼠标光标悬停在任何行中的 TextArea 上,ListView 将不会随着鼠标滚轮滚动(因为 readOnly TextView 正在捕获事件)。
【问题讨论】:
-
这是需要重新编码和重现的大量代码,如果您可以发布一个最小的工作示例,将会很有帮助。如果我正确理解您,我建议使用 1 行文本输入而不是
TextArea。由于它是只读的,请使用Label或 r/oTextInput -
@bardao 好吧,我需要显示的文本是多行的,包括 HTML。我以前在这里使用
Label,但是当HTML包含<IMG ...>标签时它不能正确处理自动换行(这可能是一个自修复的Qt错误,因为我一直在使用Qt 5.6)。 -
@MusiGenesis 你应该在你的问题中指出这一点,这样其他用户就不会给你那种替代解决方案:-)
-
那么这对你有用吗?
flickableItem.enabled: falseTextArea的属性
标签: qt qml qtquickcontrols