【QT】解决QTableView修改合并单元格内容无法修改到合并范围内的单元格
2023-12-20 06:40:26
问题:修改合并单元格的内容
修改合并单元格的内容时,希望直接修改到合并范围内的单元格,Qt没有实现这个功能,需要自己写出 Delegate来实现
方案:Delegate
class EditDelegate : public QStyledItemDelegate
{
public:
EditDelegate(QTableView *view)
: tableView(view)
{}
public:
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const override
{
// 这里你可以根据需要返回一个编辑控件,例如QLineEdit或QComboBox等。
QLineEdit *editor = new QLineEdit(parent);
return editor;
}
protected:
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override
{
QLineEdit *lineEdit = static_cast<QLineEdit *>(editor);
QString value = lineEdit->text();
// 获取合并的行、列
int rowSpan = tableView->rowSpan(index.row(), index.column());
int columnSpan = tableView->columnSpan(index.row(), index.column());
// 通过合并的行:修改ModelIndex的行索引,将修改的值给到所有的合并范围的单元格中
if (rowSpan > 1)
{
for (int i = 1; i <= rowSpan; i++)
{
QVariant data = model->data(index, Qt::EditRole);
QModelIndex mIndex = model->index(index.row() + i - 1, index.column());
model->setData(mIndex, value, Qt::EditRole);
}
}
else
{
// 编辑普通单元格
tableView->edit(index);
}
}
private:
QTableView *tableView;
};
在使用的时候将Delegate设置对应的列或者行即可
tableView->setItemDelegateForColumn(1, new EditDelegate(tableView));
文章来源:https://blog.csdn.net/weixin_44404541/article/details/135077138
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!