QTableView代理退出编辑模式前就修改数据

QTableView代理退出编辑模式前就修改数据

需求

列表上有一些QComboBoxQDoubleSpinBox,留下来的代码是用的代理(createEditor + setEditorData + setModelData)。

最新的需求需要实时修改。如果是用的代理(paint + editorEvent)或者QTableWidget,这个需求很好实现。

代理(createEditor + setEditorData + setModelData)则是在列表的editorEvent后便判断是否完成修改来发送commitDatasizeHintChanged来实现退出编辑后修改Model的数据。
setEditorDatacreateEditor都是const修饰的,信号发不出去,index也是const传入的,无法调用setModelData

不想大该原来的代码,干脆在代理初始化的时候把Model传进去吧。

xxx

原文

QTableView代理退出编辑模式前就修改数据

代码

QWidget *ComboxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem & /*option*/, const QModelIndex &index) const
{
    QComboBox *editor = new QComboBox(parent);
    editor->addItems(item_list_);
    editor->installEventFilter(const_cast<ComboxDelegate *>(this));

    connect(editor, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated),
            this, [&, index](int data) {
                model_->setData(index, data, Qt::EditRole);
            });

    return editor;
}

反思

感觉代理就是为了抽离dataview,像上边那样操作就失去了代理的意义。直接用QTableWidget设置每个单元个的Widget就好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beyond欣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值