QTableView中点击单元格弹出QComboBox

本文介绍如何使用QItemDelegate为QTableView中的特定列创建可编辑的下拉框,通过覆写createEditor(), setEditorData()和setModelData()方法实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要是用QItemDelegate,写一个类继承QItemDelegate,实现createEditor(),setEditorData()和setModelData()方法

createEditor()实现当双击时,弹出的QComboBox中显示的内容

QWidget * ItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QComboBox *editor = new QComboBox(parent);
	for (int i = 0, size = _strList.count(); i < size; i++)
		editor->addItem(_strList.at(i));
    return editor;
}

setEditorData()来设置QComboBox当前editor的数据

void ItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
    QString text = index.model()->data(index, Qt::EditRole).toString();
    QComboBox *comboBox = static_cast<QComboBox*>(editor);
    int tindex = comboBox->findText(text);
    comboBox->setCurrentIndex(tindex);
}

setModelData()设置QTableView的model的数据

void ItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
    QComboBox *comboBox = static_cast<QComboBox*>(editor);
    QString text = comboBox->currentText();
    model->setData(index, text, Qt::EditRole);
}


最后只需要创建ItemDelegate的对象,设置QTableView对应列的代理即可

ItemDelegate *itemDelegate = new ItemDelegate(this);
ui.tableView->setItemDelegateForColumn(1, itemDelegate);//设置第二列



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

kgduu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值