在我的C ++ / QML应用程序中,我使用了许多通过一个代理对象向QML公开的C ++类。实际上看起来像下面的例子:
class ProxyObject
{
Q_GADGET
Q_PROPERTY(Version MyVersion READ GetMyVersion)
public:
ProxyObject();
Version GetMyVersion();
}
class Version
{
Q_GADGET
public:
Version();
QString toString() const;
}
所有这些课程当然都暴露在QML中:
qmlRegisterSingletonType<ProxyObject>("com.MyApp", 1, 0, "ProxyObject", example_qobject_singletontype_provider);
qRegisterMetaType<Version>("Version");
现在我想在QML中使用它们:
import QtQuick 2.9
import QtQuick.Controls 2.2
import com.MyApp 1.0
ApplicationWindow {
id: mainWindow
visible: true
Label {
text: ProxyObject.Version
}
}
运行此代码导致控制台警告:
无法将版本分配给QString
在我看来这看起来是正确的,但我怎么能打印出我的对象? 我添加了
QString toString() const;
到Version类,但这没有帮助。
现在我使用属性的变通方法,我添加了
Q_PROPERTY(QString ToString READ toString)
到Version类,因此在QML中使用它:
Label {
text: ProxyObject.Version.ToString
}
但这对我来说很恶心。当我看到内置对象时,QDateTime
可以毫无问题地打印到控制台。那么我怎么能这样做并打印出来来控制我的自定义对象呢?