我是Qt的新手并尝试在Qt中创建自定义属性。 为了保持简短,我在这里合并了.h和.cpp文件,但它们在我的主项目中有所不同。 我的main.cpp是
#include<messageBody.h>
class Message : public QObject
{
Q_OBJECT
Q_PROPERTY(MessageBody* body READ body WRITE setBody NOTIFY bodyChanged)
MessageBody ob;
public:
MessageBody* body()
{
return &ob;
}
void setBody(MessageBody* body)
{
ob.textUpdate(body->text());
emit bodyChanged();
}
signals:
void bodyChanged();
};
我的message.h是
class MessageBody : public QObject
{
Q_OBJECT
Q_PROPERTY(QString text READ text WRITE textUpdate NOTIFY textChanged)
QString ori_text;
public:
void textUpdate(const QString& new_txt)
{
if(new_txt != ori_text)
{
ori_text=new_txt;
emit textChanged();
}
}
QString text()
{
return ori_text;
}
signals:
void textChanged();
};
我的messageBody.h是
import QtQuick 2.3
import QtQuick.Controls 1.2
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Text{
msg.body: "Hello, world!" //"Error here."
//I am expecting MessageBody::textUpdate()
//to get called i.e write method of Property
}
}
我的main.qml是
qrc:/main.qml:18 Cannot assign to non-existent property "msg"
执行时,我收到错误
string s = getInput(this.txtName);
感谢您的帮助。
答案 0 :(得分:2)
这是因为您正在使用msg
对象,就好像它是QML Text Element
的现有属性一样,这不是Qt为什么会给您这个错误。
我不是QML专业开发人员,但据我所知,您可以使用文本对象的现有信号(例如msg.body
o onTextChange
)致电Component.onCompleted
或尝试创建custom QML object
继承自Text
并且具有自定义属性msg.body
,该属性与您的c ++对象的msg.body
建立链接。
答案 1 :(得分:2)
我没有100%得到你要达到的目标,但也许是这样的:
main.qml
UISwipeGestureRecognizer* rightSwipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleRightSwipe:)];
rightSwipeRecognizer.direction = UISwipeGestureRecognizerDirectionRight;
[self.tableView addGestureRecognizer:rightSwipeRecognizer];
的main.cpp
import QtQuick 2.3
import QtQuick.Controls 1.2
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Text{
text: msg.body.text
}
Component.onCompleted: {
msg.body.text = "Hello, world!"
}
}
这有用吗?