【发布时间】:2016-12-17 15:35:15
【问题描述】:
我有这个 Projekt,它使用 QStatemachine 来管理 UI,我想在其中添加自定义列表。 UI 应该只由关键事件操作。据我了解,我需要 qml 端的 ListView 。
ListView 的委托只对鼠标输入或直接键输入作出反应。但是我使用 C++ 中的 QStatemachine 来操作它,因为它正在处理 UI 的所有关键事件。
当我按下右箭头键时,我想要发生的事情是将列表向左移动。
(currentItem 总是在屏幕中间。)
所以我的 ListView 目前看起来像这样。
Component {
id:myDelegation
Item {
x: 50
width: 80
height: 60
Rectangle {
width: 60
height: 60
Text {
text: name
anchors.centerIn: parent
}
color: parent.ListView.isCurrentItem ? "red" : "steelblue";
scale: parent.ListView.isCurrentItem ? 1.5 : 1;
}
}
}
ListView {
id: listView1
x: 0
y: 50
width: 1920
height: 214
orientation: ListView.Horizontal
spacing: 4
model: TileList{}
delegate: myDelegation
preferredHighlightBegin: width / 2 - 10
preferredHighlightEnd: width / 2 + 10
highlightRangeMode: ListView.StrictlyEnforceRange
}
c++ 状态机是一个向 qml 发送信号的 QStatemachine。
如何将信号绑定到 Listview 的委托?
【问题讨论】:
-
您可以直接从 QML 使用
StateMachine。它比使用 C++ 类更容易、更快捷。 -
嗯,我已经用 c++ 完成了状态机,它相当大。所以如果不从头开始,我就无法改变它。
-
然后只需将其连接到 QML。它已经是一个 QObject 派生的,因此您可以将其公开为上下文属性并使用它的信号和插槽。
标签: c++ qt listview qml qstatemachine