我正在开发一款Android应用程序。我需要显示类似控制台的日志类型,它将由C++后端写入。我尝试过将文本编辑和滚动视图结合起来,但效果非常慢。当我的日志超过50行时,添加几行会使界面慢下来(锁定)几秒钟。
精简源代码,这是日志视图部分:
property int logMaxLines: 50
ScrollView {
id: logScrollView
anchors.fill: parent
clip: true
ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
TextEdit {
id: logTextEdit
anchors.fill: parent
readOnly: true
color: "darkgreen"
property int linesTrimmed: 0
}
}
Connections{
target: gate
onNewMessageLineAdded :
{
logTextEdit.append(gate.newMessageLine)
if (logTextEdit.lineCount > logMaxLines) {
while (logTextEdit.lineCount >= logMaxLines) {
logTextEdit.text = logTextEdit.text.slice(logTextEdit.text.indexOf('\n')+2)
logTextEdit.linesTrimmed++
}
logTextEdit.insert(0, "[... trimmed " + logTextEdit.linesTrimmed + " lines ...]\n")
}
}
}
我选择了一个滚动视图,因为我想要垂直滚动条。当C++代码发出newMessageLineAdded信号时,它会一次添加一行。这来自一个包含此Q\U属性的类,用于传递新行内容:
Q_PROPERTY(QString newMessageLine READ newMessageLine NOTIFY newMessageLineAdded)
信号声明为:
void newMessageLineAdded();
我添加了一小段java,以便在日志增长过长时对其进行修剪,因为即使没有这种修剪代码,问题仍然存在。
我在这里做什么很笨拙的事吗?我是否应该使用另一种类型的对象来替换TextEdit,因为我知道它根本不用于编辑文本,而只是作为一种显示?
谢谢