好吧,我正在尝试使用 qml 制作一种信使。我有一个文本区域和一个发送按钮。单击发送按钮时,文本区域内的文本将显示在屏幕上的某处。但文本区域中的任何其他更改都会更改标签的上下文。我尝试使用 createObject(...) 但没有帮助。还有其他方法可以动态创建标签(或任何其他组件)吗?
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3
import QtQuick.Controls.Material 2.1
ApplicationWindow {
visible: true
width: 640
height: 480
property var xPosition : 500
property var yPosition: 200
title: qsTr("server")
Rectangle{
width: parent.width
height: parent.height
Button{
id: sentButton
width: parent.width / 14
x: parent.height + 112
y: parent.width - 200
Material.accent: Material.Blue
Material.background: Material.DeepOrange
Text {
id: name
text: qsTr("Send")
color: "white"
x:parent.width / 4
y:parent.height / 4
}
onClicked: {
//add label with the context of textarea
}
}
Rectangle{
id:back
height: sentButton.height
width: parent.width - sentButton.width
x:0
y: 435
color: "white"
border.width: 0.5
TextArea{
id:search
placeholderText: qsTr("Search")
x:7
width: parent.width - 25
background: null
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不会手动创建Label,而是向模型添加一行(如ListModel)并用ListView.
将为ListView模型的每一行实例化一个委托,它比手动执行更干净。另外,您还可以免费获得滚动行为。
这里的例子:
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3
import QtQuick.Controls.Material 2.1
ApplicationWindow {
visible: true
width: 640
height: 480
Material.accent: Material.DeepOrange
ListModel {
id: messageModel
}
ColumnLayout {
anchors { fill: parent; margins: 8 }
spacing: 16
ListView {
Layout.fillWidth: true; Layout.fillHeight: true
model: messageModel
delegate: ItemDelegate { text: model.message }
}
RowLayout {
spacing: 16
Layout.fillWidth: true; Layout.fillHeight: false
TextField {
id: textField
Layout.fillWidth: true; Layout.fillHeight: true
}
Button {
Material.foreground: "white"; Material.background: Material.DeepOrange
Layout.fillHeight: true
text: "Send"
onClicked: {
messageModel.append({message: textField.text});
textField.text = "";
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,Button将向 附加一个新行,并将ListModel的作为消息角色TextField。text然后,ListView模型的每一行都会实例化一个ItemDelegate显示消息的角色。
| 归档时间: |
|
| 查看次数: |
2394 次 |
| 最近记录: |