QItemEditorCreator Class
QItemEditorCreatorBase Class ------>
QStandardItemEditorCreator Class
1.通过继承QItemEditorCreatorBase可以为QItemEditorFactory注册自定义的Item使用在 QTableWidget上面实现自定义效果的项。
QItemEditorCreatorBase Class
Header: | #include <QItemEditorCreatorBase> |
qmake: | QT += widgets |
Since: | Qt 4.2 |
Inherited By: |
virtual | |
virtual QWidget * | createWidget(QWidget *parent) const = 0 |
virtual QByteArray | valuePropertyName() const = 0 |
2.通过QItemEditorCreatorBase的模版子类QItemEditorCreator和QStandardItemEditorCreator实现使用自定义项。
Header: | #include <QItemEditorCreator> |
qmake: | QT += widgets |
Since: | Qt 4.2 |
Inherited : |
Header: | #include <QStandardItemEditorCreator> |
qmake: | QT += widgets |
Since: | Qt 4.2 |
Inherited : |
1. QItemEditorCreatorBase
实现纯虚函数:
virtual QWidget * createWidget(QWidget *parent) const = 0
QItemEditorFactory使用这个函数创建项
virtual QByteArray valuePropertyName() const = 0
设置和返回自定义属性部件的属性值
例:带输入验证器的QLineEdit
实现带验证器的QLineEdit作为QTableWidget的项。
#include <qmetatype.h>
#include <QMetaProperty>
#include <qitemdelegate.h>
#include <QItemEditorCreatorBase>
class QLineEditCreator : public QItemEditorCreatorBase
{
public:
QLineEditCreator(const QByteArray& valuePropertyName, QRegExp exp):
propertyName(QLineEdit::staticMetaObject.userProperty().name()),exp(exp) {
}
//工厂(QItemEditorFactory)使用这个函数创建自定义效果的项
QWidget* createWidget(QWidget* parent) const override
{
auto* lineEdit = new QLineEdit(parent);
// 在这里设置限制输入的属性
QRegExpValidator* validator = new QRegExpValidator(this->exp);
lineEdit->setValidator(validator);
return lineEdit;
}
//工厂(QItemEditorFactory)使用该函数设置属性信息
QByteArray valuePropertyName() const {
return propertyName;
}
private:
QByteArray propertyName;
QRegExp exp;
};
.CPP
QItemDelegate* itemDelegate = new QItemDelegate;
this->factory = new QItemEditorFactory();
//在工厂(QItemEditorFactory)中注册该项
this->factory->registerEditor(QVariant::String,new QLineEditCreator("values",exp));
//为项代理设置工厂
itemDelegate->setItemEditorFactory(factory);
//为QTableWidget某列设置自定义效果的Item
QTableWidget* table=static_cast<QTableWidget*>(parent);
table->setItemDelegateForColumn(1, itemDelegate);
//@该效果只有在Item被新建之后才会有效果
table->setItem(i, i, new QTableWidgetItem());
//@(来自自己项目实现)
2. QItemEditorCreator和QStandardItemEditorCreator实现使用自定义项。
QItemEditorCreator<MyEditor> *itemCreator = new QItemEditorCreator<MyEditor>("myProperty");
QItemEditorFactory *factory = new QItemEditorFactory; (来自QT官方文档)
QItemEditorFactory *editorFactory = new QItemEditorFactory;
QItemEditorCreatorBase *creator = new QStandardItemEditorCreator<MyFancyDateTimeEdit>();
editorFactory->registerEditor(QVariant::DateType, creator); (来自QT官方文档)
注:
QItemEditorFactory Class:
void registerEditor(int userType, QItemEditorCreatorBase *creator);//为工厂注册自定义组件
QVariant::Type{...Int = QMetaType::Int,...} .1
//int userType为 .1 中的enum值
Type Editor Widget
bool QComboBox
double QDoubleSpinBox
int QSpinBox
QDate
QDateEdit
QDateTime
unsigned int QDateTimeEdit
QPixmap
QLabel
QString
QLineEdit
QTime
QTimeEdit
该博客为本人工作学习笔记,如有错误恳请指正