在QT / QML 5.11上,我很难过这么简单的事情,我几乎认为此时库中存在错误。
我有以下代码:
Flickable {
id: txflick
anchors.top: title_label.bottom
anchors.bottom: crect.bottom
anchors.right: crect.right
anchors.left: busy_ind.right
flickableDirection: Flickable.VerticalFlick
onContentYChanged: console.log("contentY_changed", this.contentY)
//contentY: txarea.contentHeight - txarea.height
interactive: false // Has no effect, contentY keeps changing to zero
TextArea.flickable: TextArea {
id: txarea
topPadding: 8
bottomPadding: 10
leftPadding: 10
rightPadding: 10
readOnly: true
text: menu_view.pwrcon.text
onTextChanged: {
console.log("text changed")
txflick.contentY = txarea.contentHeight - txflick.height
console.log("chg", txarea.contentHeight - txflick.height)
console.log(text)
}
onContentHeightChanged: {
console.log("ctheight = ___", contentHeight, height, txflick.height, txflick.contentHeight)
}
font.family: "DejaVu Sans Mono,Ubuntu Sans Mono,Noto Sans Mono"
font.bold: false
font.pixelSize:12
color: "black"
//verticalAlignment: TextInput.AlignTop
background: Rectangle { color: "lightgrey"; radius: 2;
border.width: 1; border.color: "darkgrey" }
}
}
基本上,TextArea的文本链接到“ menu_view.pwrcon.text”,在Python代码中对其进行了更改(这是一个属性)。当文本更改时,我希望它将可滑动控件设置为文本底部,以便我们看到最近添加的行。
我愿意
txflick.contentY = txarea.contentHeight - txflick.height
触发onTextChanged()事件时。那里没有问题,我检查了数字就可以了(手动滚动到console.log()所示的数字表明contentY计算正确)。
但是似乎组件(可轻弹)在我更改contentY之后,将其单独更改回0(此行为仅在文本高度大于可轻弹的固定高度之后发生)。真是愚蠢,我怀疑这是错误还是故意的。
换句话说,在我计算之后,contentY在没有我干预的情况下神奇地恢复为零,这当然会破坏整个事情。
有什么要解决的问题吗?
答案 0 :(得分:0)
您可以使用Flickable或ScrollView来实现。
在TextArea中将光标位置更改为会自动聚焦在该行上。
在文本区域中创建一个函数,并在每次文本更改时更改焦点。您必须手动调用
const static auto do_nothing = [](auto &&){};
// Requires C++14, if you have C++17 available, use
constexpr auto do_nothing = [](auto &&){};
或 您可以直接设置属性
cursorPosition = length-1
在每次文本更新时在TextArea块中。
cursorPosition : length-1