c – 将抽象类型作为Q_PROPERTY公开给QML
我正在使用Qt 4.8和BB10.
我为要实现的类定义了一个基本接口: class AbstractImageProcessor : public QObject { public: AbstractImageProcessor(QObject * parent) : QObject(parent) {} virtual QImage process(const QByteArray &data) = 0; virtual ~AbstractImageProcessor(){ } }; 我希望从QML中使用的一个这样的实现看起来像这样: class WebImageProcessor : public AbstractImageProcessor { Q_OBJECT Q_PROPERTY(int maxHeight READ getMaxHeight WRITE setMaxHeight NOTIFY maxHeightChanged) Q_PROPERTY(int maxWidth READ getMaxWidth WRITE setMaxWidth NOTIFY maxWidthChanged) Q_PROPERTY(bool fit READ isFit NOTIFY fitChanged) public WebImageProcessor(QObject * parent = 0) : AbstractImageProcessor(parent) {} virtual ~WebImageProcessor() {} /* rest of code omitted */ }; 我想将此AbstractImageProcessor作为另一个QML类型的属性公开: class WebImageView : public bb::cascades::ImageView { Q_OBJECT Q_PROPERTY(AbstractImageProcessor* processor READ getProcessor WRITE setProcessor NOTIFY processorChanged) WebImageView(bb::cascades::Container * parent) : bb::cascades::ImageView(parent) {} virtual WebImageView() {} /* rest of code omitted */ }; 所以我用QML注册我的自定义类型 //application.cpp qmlRegisterUncreatableType<AbstractImageProcessor>("foo.controls",1,"AbstractImageProcessor",""); ; qmlRegisterType<WebImageProcessor>("foo.controls","WebImageProcessor"); qmlRegisterType<WebImageView>("foo.controls","WebImageView"); 我想如何在QML中使用它 //main.qml import foo.controls 1.0 /* omitted containers */ WebImageView { processor: WebImageProcessor { maxHeight: 500 maxWidth: 300 } /* rest of properties omitted */ } 但是一旦我启动我的应用程序,它就无法解析qml文档. bb :: cascades :: QmlDocument:加载QML时出错:QUrl(“asset:///main.qml”) 事实上,如果我将鼠标悬停在编辑器中的WebImageProcessor类上,它会说: 组件WebImageProcessor的超类型未知,其某些属性未经过验证. 现在的问题是,例如内置的级联ListView将抽象类型公开为Q_PROPERTY: http://developer.blackberry.com/native/reference/cascades/bb_cascades_listview.html#property-datamodel 检查bb :: cascades :: ListView和bb :: cascades :: DataModel的头文件的事件没有给我任何其他线索,因为它基本上以相同的方式完成. 难道我必须以不同的方式注册类型吗?如果是这样的话? 如果我在Q_PROPERTY而不是AbstractImageProcessor中使用WebImageProcessor,那么它按预期工作,但我想暴露抽象类型,并且鉴于级联执行它然后它绝对可能以某种方式 谢谢 解决方法
您的AbstractImageProcessor声明缺少Q_OBJECT宏,这是将类导出到QtQuick所必需的.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |