QItemEditorCreatorBase Class
QItemEditorCreatorBase 类提供了一个抽象基类,在实现新的项目编辑器创建器时,必须继承该类。更多内容...
| 头文件: | #include <QItemEditorCreatorBase> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| 由以下函数继承: |
公共函数
| virtual | ~QItemEditorCreatorBase() |
| virtual QWidget * | createWidget(QWidget *parent) const = 0 |
| virtual QByteArray | valuePropertyName() const = 0 |
详细描述
QItemEditorCreatorBase 对象是专门的控件工厂,为特定的QVariant 数据类型提供编辑器控件。QItemEditorFactory 会使用它们来为QStyledItemDelegate创建编辑器。创建器基类必须通过QItemEditorFactory::registerEditor()进行注册。
编辑器应为其所编辑的数据提供一个用户属性。这样,QItemDelegates 就可以利用 Qt的元对象系统访问该属性,从而设置和获取编辑数据。通过使用 USER 关键字,可以将一个属性设置为用户属性:
Q_PROPERTY(QColor color READ color WRITE setColor USER true)如果编辑器未提供用户属性,则必须通过 `valuePropertyName()` 返回该属性的名称;随后,项目委托将使用该名称访问该属性。如果存在用户属性,项目委托将不会调用 `valuePropertyName()`。
QStandardItemEditorCreator 是一个便捷的模板类,可用于注册小部件,而无需继承 QItemEditorCreatorBase。
另请参阅 QStandardItemEditorCreator 、QItemEditorFactory 以及模型/视图编程。
成员函数文档
[virtual noexcept] QItemEditorCreatorBase::~QItemEditorCreatorBase()
销毁编辑器创建器对象。
[pure virtual] QWidget *QItemEditorCreatorBase::createWidget(QWidget *parent) const
返回一个带有指定parent 的编辑器控件。
在该类的子类中实现此函数时,必须根据指定的父控件创建并返回新的编辑器控件。
[pure virtual] QByteArray QItemEditorCreatorBase::valuePropertyName() const
返回用于在创建器的编辑器控件中获取和设置值的属性名称。
在子类中实现此函数时,必须确保该函数指定的编辑器控件属性能够接受创建器所注册的类型。例如,一个用于构建QCheckBox 控件以编辑布尔值的创建器,将通过此函数返回checkable 属性名称,并且必须在项编辑器工厂中注册为QMetaType::Bool 类型。
注意:自 Qt 4.2 起,项委托会查询小部件的用户属性,仅当小部件没有用户属性时才会调用此函数。您可以通过重新实现QAbstractItemDelegate::setModelData() 和QAbstractItemDelegate::setEditorData() 来覆盖此行为。
另请参阅 QMetaObject::userProperty() 和QItemEditorFactory::registerEditor()。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.