我似乎没有找到任何关于向 QML 添加基本类型的资源。我不是指 QObject 或更高派生的元素,而是基本类型 - bool、int、real 等。
也没有任何运气在来源中挖掘它......
因此,任何信息都值得赞赏。
我似乎没有找到任何关于向 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)
}
}