c++ - 在 QML 中使用自定义类中的 Q_PROPERTY

标签 c++ qt qml qproperty

我被 Qt 中的“设计/实现”问题困住了。 目前我什至不确定这是否是一个聪明的设计...... 这是我在这里的第一篇文章,我真的不知道从哪里开始......

所以我会尝试这样... 目前我有这样的事情:

class NewProperty : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString name READ name WRITE setName)
    .
    .
    .

public:
    NewProperty(const QString &name, QObject *parent = 0);

    QString name()const;
    void    setName(const QString &name);
    .
    .
    .
private:
    QString m_s_name;
};

那是我想在“MyClass”中拥有的“NewProperty”类,因为最终将不仅仅是一个“名称”属性……NewProject.cpp 文件目前非常基本……

而且项目中还会有几个MyClasses。

我的“MyClass”最终会有几个“NewProperty”的元素...... 但是我不确定如何以正确/好的方式将“NewProperty”传递给 QML。 我试图做这样的事情:

class QML_EMail : public Base_Output
{
   Q_OBJECT
public:
   NewProperty prop1;
   NewProperty prop2;
  .
  .
  .
};

主要.cpp

...
qmlRegisterType<NewProperty>      ("NewProperty", 1, 0, "NewProperty"); 
QML_EMail email
ctx->setContextProperty("email",            QVariant::fromValue(&email));
...

如果我尝试在 QML 文件中调用这样的东西:

import NewProperty 1.0

Rectangle {
    id: emailStart

Component.onCompleted:
{
    console.log(email.prop1.name)
}

我只收到此消息:类型错误:无法读取未定义的属性“名称”

对于更好的编码,我将不胜感激任何帮助或提示......

问候,

最佳答案

欢迎来到 Stack Overflow。

我认为 Qt 属性不能那样使用。如果您想从 QML 访问属性,则必须使用 Q_PROPERTY 本身定义类(基于 QObject)的成员,以便由 Qt 的元对象系统公开。所以你不能简单地使用另一个也有这样的属性的类。

本质上,您拥有具有属性的嵌套对象,因此如果您想在 QML 中使用它们,您还必须这样标记它们。如果不需要 getter 和 setter,一个简单的解决方案是使用 MEMBER 关键字:

Q_PROPERTY(NewProperty prop1 MEMBER prop1)
NewProperty prop1;

如果您希望将自定义的 NewProperty 类作为属性使用,您仍然可能需要将它暴露给元系统。参见 Creating Custom Qt Types有关自定义类型的更多信息。

关于c++ - 在 QML 中使用自定义类中的 Q_PROPERTY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46604036/

相关文章:

c++ - 模板参数作为变量

c++ - 按私有(private)成员对自定义对象进行排序

c++ - 如何在 QTreeWidget 中找到选定的项目?

c++ - QPolarChart隐藏径向刻度标签

qt - 如何以编程方式在 qml 中渲染 vtk 项?

c++ - 尝试在 Blackberry Cascades QT 和 QML 中下载图像

c++ - 如何以及在何处定义预处理器指令,以便我们可以在项目中的任何地方访问它们?

C++如何在函数内创建和返回迭代器?

python - Qt QGraphicsDropShadowEffect 没有显示

qt - QML MouseArea onEntered hideEnabled 不起作用