QTableView中点击单元格弹出QComboBox

主要是用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);//设置第二列



  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
QTableViewQt框架提供的一个表格视图组件,可以用于显示表格数据。在QTableView合并单元格的方式有两种: 1. 使用setSpan()函数:通过调用QTableView的model()函数获取表格数据模型,然后调用模型的setSpan()函数设置需要合并的单元格范围。示例代码如下: ``` QStandardItemModel *model = new QStandardItemModel(); QTableView *tableView = new QTableView(); tableView->setModel(model); // 合并第1行第1列和第2列 model->setSpan(0, 0, 1, 2); ``` 2. 自定义代理:继承QStyledItemDelegate类并重写sizeHint()和paint()函数,实现自定义代理。在paint()函数使用QPainter绘制需要合并的单元格,使用sizeHint()函数返回合并后单元格的大小。示例代码如下: ``` class MergeCellsDelegate : public QStyledItemDelegate { public: QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override { // 返回合并后单元格的大小 return QSize(100, 50); } void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override { // 绘制需要合并的单元格 painter->drawText(option.rect, Qt::AlignCenter, "Merged Cells"); } }; QStandardItemModel *model = new QStandardItemModel(); QTableView *tableView = new QTableView(); tableView->setModel(model); // 设置自定义代理 MergeCellsDelegate *delegate = new MergeCellsDelegate(); tableView->setItemDelegateForColumn(0, delegate); tableView->setItemDelegateForRow(0, delegate); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

kgduu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值