gpt4 book ai didi

c++ - 如何创建具有预定义状态的自定义 Quick QML 项

转载 作者:行者123 更新时间:2023-11-28 05:24:15 24 4
gpt4 key购买 nike

我是 Qt 的新手,所以我可能会问一个非常明显的问题。

我想为我想用 C++ 创建的所有自定义 QML GUI 元素创建一个父类(super class)型。这个父类(super class)型应该将预定义状态添加到 QML 项。类似的东西:

    import StatedGuiElement 1.0
import QtQuick 2.0

Item {
width: 300; height: 200

StatedGuiElement {
id: aStatedGuiElement
anchors.centerIn: parent
width: 100; height: 100
//some visible Custom Gui Elements
states:[
State {
name: "A_STATE"

},
State {
name: "ANOTHER_STATE"
}]
}

我知道如何通过本教程 (http://doc.qt.io/qt-5/qtqml-tutorials-extending-qml-example.html) 创建一个简单的自定义项。我想状态可以通过在继承自 QQuickItem 的 C++ 类中使用枚举来定义。但是,本教程并未展示如何创建更复杂的 Qt Quick 元素,例如状态列表。

class StatedGuiElement : public QQuickItem
{
Q_OBJECT
Q_PROPERTY(QString name READ name WRITE setName)
//pass States via Q_PROPERTY?
public:
//define Enum for fixed States here?
//ENUM STATES {A_STATE, ANOTHER_STATE}
StatedGuiElement( QQuickItem *parent = 0);

QString name() const;
void setName(const QString &name);


private:
QString m_name;
//Some List of States?


signals:

public slots:
};

所以我想知道的问题如下:

  • 甚至可以预定义 QML 状态类型并在多个元素中使用它们吗?
  • 如何在 C++ 类(如 StatedGuiElement)中添加复杂的 QML 类型(如状态列表)?

最佳答案

首先,您将 StatedGuiElement 创建为 QQuickItem 子类。

然后创建一个 StatedGuiElement.qml,导入包含 C++ 元素的包,在里面创建一个 StatedGuiElement {},将 QML 中的状态添加到其中,然后您可以在项目中使用 StatedGuiElement。它将是其中预定义了 QML 额外内容的那个。

这假定该元素实际上具有您需要在 C++ 中实现的内容。如果不是,那么拥有 C++ 元素根本就没有意义。我不确定旧的 C++ 状态类是否可以与 QML 一起使用,可能不会,并且使用 C++ 中的 QML 状态一点也不方便,所以你真的应该在 QML 中做状态,在你可能拥有的任何 C++ 东西之上。

关于c++ - 如何创建具有预定义状态的自定义 Quick QML 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40875618/

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