我坚持使用"设计/实施"问题在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;
};
那是" NewProperty"我希望在" MyClass"最终会有一个不仅仅是一个名字"属性... NewProject.cpp文件目前非常基本......
项目中还会有几个MyClasses。
My" MyClass"将有几个" NewProperty"最终的元素...... 但我不确定如何通过" NewProperty"以正确/好的方式进行QML。 我试着做这样的事情:
class QML_EMail : public Base_Output
{
Q_OBJECT
public:
NewProperty prop1;
NewProperty prop2;
.
.
.
};
的main.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)
}
我只收到此消息:TypeError:无法读取属性&#39; name&#39;未定义的
我很感激任何有关更好编码的帮助或提示......
的问候,
萌
答案 0 :(得分:2)
欢迎使用Stack Overflow。
我不认为Qt属性可以这样使用。如果要从QML访问属性,则必须使用QObject
本身定义类(基于Q_PROPERTY
)成员,以便由Qt的元对象系统公开。所以你不能简单地使用另一个同样具有属性的类。
基本上你有嵌套对象的属性,所以如果你想在QML中使用它们,你也必须这样标记它们。一个简单的解决方案是,如果您不需要getter和setter,则使用MEMBER关键字:
Q_PROPERTY(NewProperty prop1 MEMBER prop1)
NewProperty prop1;
如果要将自定义NewProperty
类用作属性,则可能还需要将其公开给元系统。有关自定义类型的详细信息,请参阅Creating Custom Qt Types。