[英]How to create custom basic type in QML?
在向QML添加基本类型方面,我似乎找不到任何资源。 我不是指QObject或更高的派生元素,而是基本类型-bool,int,real等。
也没有在源头上挖掘它的运气...
因此,任何信息表示赞赏。
我假设您想注册比int,bool和real更复杂的类型,因为它们已经存在。
您无法在Qt 4.x中执行此操作。 在Qt 5(QML 2)中是可能的,但是没有公共API。 如果您仍然想要这样做,则由于没有文档,因此您需要深入研究一些代码以了解其工作方式。
您需要实现QQmlValueTypeProvider(qqmlglobal_p.h)并为每种类型创建QQmlValueTypeBase <>子类(qqmlvaluetype_p.h)。 然后使用插件的registerTypes()中的QQml_addValueTypeProvider()注册您的值类型提供程序。
您可以查看的一个示例是QtLocation模块中的QGeoCoordinate,QGeoRectangle等: http ://qt.gitorious.org/qt/qtlocation/trees/master/src/imports/location
祝好运。
从Qt 5.5开始,您可以使用Q_GAGDET创建基本类型。 例如,您可以创建一个自定义MyError类:
class MyError
{
Q_GADGET
Q_ENUMS(ErrorType)
Q_PROPERTY(bool suppressed READ suppressed WRITE setSupressed)
Q_PROPERTY(QString message READ message WRITE setMessage)
Q_PROPERTY(ErrorType type READ type WRITE setType)
public:
enum ErrorType {
Warning, //Survex should still run
Fatal, //Survex will not run
Unknown
};
cwSurveyChunkError();
cwSurveyChunkError(const cwSurveyChunkError &);
cwSurveyChunkError &operator=(const cwSurveyChunkError &);
~cwSurveyChunkError();
ErrorType type() const;
void setType(ErrorType type);
QString message() const;
void setMessage(QString message);
bool suppressed() const;
void setSupressed(bool suppressed);
private:
QSharedDataPointer<MyErrorData> data;
};
Q_DECLARE_METATYPE(MyError) //Allows you to use this class in QVariant
您需要使用qmlRegisterUncreatableType向qml注册类型。 这使您可以在QML中使用MyError.ErrorType枚举。 由于MyError是Q_GADGET,因此您可以将其直接传递给QML并使用MyError属性,就好像它是QObject。 Q_GADGET对象是QObject的较轻版本,但不能在QML中创建,并且信号和插槽在它们中不起作用。
QML示例:
Item {
Component.onCompleted: {
var error = model.errorAt(4); //Returns MyError
console.log("Error:" + error.type + " " + error.message + " " + error.suppressed)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.