gpt4 book ai didi

c++ - 实现附加对象 : Unclear Documentation Example

转载 作者:行者123 更新时间:2023-11-30 03:30:28 26 4
gpt4 key购买 nike

我尝试理解文档部分 Providing Attached Objects for Data Annotations ,或者特别是它的例子。

如果我的步骤正确,它会像这样工作:

  1. 创建一个类型 (MessageBoardAttatchedType),其中包含可通过附加属性访问的信号和属性
  2. 创建一个静态方法,该方法返回类型中上述类型的实例,该实例应用作附加属性 (MessageBoard)
  3. 通过调用宏 QML_DECLARE_TYPEINFO(..., QML_HAS_ATTACHED_PROPERTIES) 提供此附加类型存在的信息

我有以下问题:

(次要的):在文档中我们有这段代码:

static MessageBoard *qmlAttachedProperties(QObject *object)
{
return new MessageBoardAttachedType(object);
}

返回类型是MessageBoard,但我们返回一个MessageBoardAttachedType。这怎么可能? MessageBoardAttachedType 不继承 MessageBoard - 3. 中的宏有什么魔力吗?

主要问题:

Here我们了解到,附加属性可能(?) 仅在非常特定的Items 中可用 - 例如仅在 XView 附加属性的委托(delegate)根中。

示例中没有提到,我可以从 Message 对象访问附加属性。这是如何确定的?通过从

返回 null
*qmlAttachedProperties(...)

如果传递的 *object 不让我满意(例如不是 Message)?

最佳答案

qmlAttachedProperties 返回空指针将使 QML 引擎崩溃。您应该始终在 qmlAttachedProperties 中返回一个对象的实例。

然而,当附加的对象不符合您的要求时,您可以在 qmlAttachedProperties 函数中或在附加类型的构造函数中显示警告。

例如,这就是 StackView 附加类型和其他多个类型的处理方式。

qmlAttachedProperties of StackView无条件地返回一个对象:

QQuickStackViewAttached *QQuickStackView::qmlAttachedProperties(QObject *object)
{
return new QQuickStackViewAttached(object);
}

constructor of the StackView attached type如果附加对象不是 QQuickItem(使用 qobject_cast 检查),则输出警告,并且只有在它是时才发挥它的魔力。

QQuickStackViewAttached::QQuickStackViewAttached(QObject *parent)
: QObject(*(new QQuickStackViewAttachedPrivate), parent)
{
Q_D(QQuickStackViewAttached);
QQuickItem *item = qobject_cast<QQuickItem *>(parent);
if (item) {
connect(item, &QQuickItem::visibleChanged, this, &QQuickStackViewAttached::visibleChanged);
QQuickItemPrivate::get(item)->addItemChangeListener(d, QQuickItemPrivate::Parent);
d->itemParentChanged(item, item->parentItem());
} else if (parent) {
qmlWarning(parent) << "StackView must be attached to an Item";
}
}

关于c++ - 实现附加对象 : Unclear Documentation Example,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44944100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com