qt中的委托-简单的应用

qt中表格的数据默认是无法编辑的,当在model的flag()函数中设置其可编辑后,双击数据可以通过lineEdit(qt默认的编辑器是一个有边框的lineEdit)对数据进行编辑,但有时我们希望数据可以通过用下拉框来选择或者其他的编辑器来编辑数据,或者我们希望通过鼠标点击此数据来触发某个事件达到修改数据的目的或者其他的什么目的。这时就要用到委托QstyleItemDelegate。

qt默认的编辑器的效果:


如果我们想要达到下拉框的效果:


必须要重写三个函数:

1.QWidget*createEditor()  告诉model用的是那个编辑器进行数据的编辑和选择

2.voidsetEditorData()        从model中读取数据,设置编辑器显示的数据

3.voidsetModelData( )        从编辑器中读取当前显示的数据,设置model中的数据源

代码如下:

#include <QStyledItemDelegate>

class QModelIndex;
class QPainter;
class QStyleOptionViewItem;

class ItemDelegate : public QStyledItemDelegate
{
    Q_OBJECT

public:
    explicit ItemDelegate(QObject *parent=0)
        : QStyledItemDelegate(parent) {}

    QWidget *createEditor(QWidget *parent,
                          const QStyleOptionViewItem &option,
                          const QModelIndex &index) const;
    void setEditorData(QWidget *editor,
                       const QModelIndex &index) const;
    void setModelData(QWidget *editor, QAbstractItemModel *model,
                      const QModelIndex &index) const;
};
对应的.cpp 文件中:

QWidget *ItemDelegate::createEditor(QWidget *parent,
        const QStyleOptionViewItem &option,
        const QModelIndex &index) const
{
    static QStringList usStates;
    if (usStates.isEmpty())
        usStates << "(Unknown)" << "Alabama" << "Alaska"
            << "Arizona" << "Arkansas" << "California"
            << "Colorado" << "Connecticut" << "Delaware"
            << "District Of Columbia" << "Florida" << "Georgia";

        QComboBox *editor = new QComboBox(parent);
        //设置好对应的编辑器,添加好其中的内容及其大小的边界限制等
        editor->addItems(usStates);
        return editor;
}
 
void ItemDelegate::setEditorData(QWidget *editor,
        const QModelIndex &index) const
{
        //获取m
  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值