QTableWidget使用自定义Item

                                                                             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:

QItemEditorCreator and QStandardItemEditorCreator

Public Functions

virtual

~QItemEditorCreatorBase()

virtual QWidget *

createWidget(QWidget *parent) const = 0

virtual QByteArray

valuePropertyName() const = 0

2.通过QItemEditorCreatorBase的模版子类QItemEditorCreatorQStandardItemEditorCreator实现使用自定义项。

Header:

#include <QItemEditorCreator>

qmake:

QT += widgets

Since:

Qt 4.2

Inherited :

QItemEditorCreatorBase

Header:

#include <QStandardItemEditorCreator>

qmake:

QT += widgets

Since:

Qt 4.2

Inherited :

QItemEditorCreatorBase

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.   QItemEditorCreatorQStandardItemEditorCreator实现使用自定义项。

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

 

                                                                               该博客为本人工作学习笔记,如有错误恳请指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值