gpt4 book ai didi

c++ - 如何使用 QStatemachine 影响 ListView?

转载 作者:行者123 更新时间:2023-11-30 02:27:57 25 4
gpt4 key购买 nike

我有这个 Projekt,它使用 QStatemachine 来管理 UI,我想在其中添加自定义列表。 UI 应该只由关键事件操作。据我了解,我需要在 qml 端有一个 ListView。

ListView 的委托(delegate)仅对鼠标输入或直接键输入作出 react 。但我使用 C++ 中的 QStatemachine 来操作它,因为它正在处理 UI 的所有关键事件。当我按下右箭头键时,我想要发生的是将列表向左移动。
(currentItem 总是在屏幕中间。)

this is the inital State of the lisfview

enter image description here

所以我的 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++ Statemachine 是一个 QStatemachine,它向 qml 发送信号。

如何将信号绑定(bind)到 Listview 的委托(delegate)?

最佳答案

最简单的方法是让状态机设置“currentIndex”

一个常见的模式是在 QML 和 QStateMachine 之间建立一个接口(interface)对象

class StateInterface : public QObject
{
Q_OBJECT
Q_PROPERTY(int currentIndex MEMBER m_currentIndex NOTIFY currentIndexChanged)

public:
explicit StateInterface(QObject *parent = 0);

signals:
void currentIndexChanged() const;

private:
int m_currentIndex;
};

该对象的实例通过“上下文属性”机制暴露给 QML

StateInterface stateInterface;
qmlEngine->rootContext()->setContextProperty("_stateInterface", &stateInterface);

并根据需要在QML中使用

ListView {
currentIndex: _stateInterface.currentIndex
}

QStateMachine 使用相同的stateInterface 对象作为状态属性分配的目标

QState *beginState = new QState(stateMachine);
beginState->assignProperty(&stateInterface, "currentIndex", 0);
// and so on.

StateInterface 对象还可以提供插槽供 QML 使用以影响状态更改。例如

public slots:
void triggerReset() { emit trigger reset(); }

signals:
void reset();

QStateMachine 可以,例如,然后通过将信号转换到 beginState

来对这些信号作出 react

总结这种技术:

  1. QStateMachine 控制应用程序状态
  2. QML 感兴趣的所有状态数据都通过一个或多个接口(interface)对象公开
  3. QML 端以一种漂亮的声明方式使用状态数据,就像它自己处理状态一样

关于c++ - 如何使用 QStatemachine 影响 ListView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41200182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com