QStandardItemModel详解

3 篇文章 0 订阅
3 篇文章 2 订阅

我希望这篇文章可以达到的效果是:关于表格,你需要的全在这。表格的组成、属性和操作,如何用代码实现,关于QStandardItemModel的功能和使用一目了然。

需求概述

从表格使用需求说起

我们想学习一个东西,首先需要知道它是什么,能做什么,从整体结构上认识和分解它,然后再学习它。否则学的都是零零散散的知识点,一转头就忘记了,很难有个全面的认识。

在学习QStandardItemModel之前,我们先一步步列出一个表格的组成、属性和操作。在Qt中,我们通常用QTableView来实现表格。由于QStandardItemModel可以直接绑定表格,所以了解了QTableView使用需求,也就了解了QStandardItemModel。

表格我们都很熟悉,平时用EXCEL表,潜意识就直接使用,但很可能没有好好的去总结过表格到底包括哪些东西,虽然简单,但需要编程时,想到的还是零碎的东西。

表格组成元素

  1. 表头,包括行表头和列表头(常用)
  2. 行和列
  3. 单元格

表格属性

  1. 行高和列宽
  2. 字体和颜色
  3. 底色

表格操作

  1. 读写单元格
  2. 添加行或列
  3. 删除行或列
  4. 选中行或列
  5. 复选框设置和判断

用户点击“添加”按钮时,在QTableView添加一行,光标闪烁在波长单元格,以提示输入波长值。右侧添加一个复选框,用户选中对应波长,以便实现进行对该波长的其他操作。

代码实现

在QTableView添加一行,光标闪烁在新添加行首列单元格

点击复选框,选中该行,并显示波长值

关于QTableView的基本操作

QTableView与QStandardItemModel绑定

二者绑定后,当在QTableView修改数据时,QStandardItemModel随之改变,反之亦然。

设置标题内容

添加新行

添加一个QStandardItem

添加多个QStandardItem

删除选中行

删除单行

model->removeRow(selectModel->currentIndex().row());

删除多行

要删除 QStandardItemModel 中的选中行,你可以使用 QItemSelectionModel 来获取选中行的索引,然后在模型中执行删除操作。

以下是一个示例,演示如何删除 QStandardItemModel 中的选中行:

QStandardItemModel* model = new QStandardItemModel(this);

// 添加一些项到模型中
QStandardItem* item1 = new QStandardItem("Item 1");
model->setItem(0, 0, item1);

QStandardItem* item2 = new QStandardItem("Item 2");
model->setItem(1, 0, item2);

QStandardItem* item3 = new QStandardItem("Item 3");
model->setItem(2, 0, item3);

// 创建 QTableView
QTableView* tableView = new QTableView;
tableView->setModel(model);
tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
tableView->setSelectionMode(QAbstractItemView::ExtendedSelection);
tableView->show();

// 删除选中行
QItemSelectionModel* selectionModel = tableView->selectionModel();
QModelIndexList selectedIndexes = selectionModel->selectedRows();

// 倒序遍历选中的索引
for (int i = selectedIndexes.size() - 1; i >= 0; --i) {
    QModelIndex selectedIndex = selectedIndexes.at(i);
    model->removeRow(selectedIndex.row());
}

在上述示例中,我们首先创建了一个 QStandardItemModel 对象,并向模型中添加了一些项。然后,我们创建了一个 QTableView 视图,并将模型设置为视图的数据源。

我们还设置了视图的选择行为为选择整行,并启用了扩展选择模式,以便能够选择多行。

接下来,我们获取视图的 QItemSelectionModel 对象,并使用 selectedRows() 方法获取选中行的索引列表。然后,我们使用一个倒序循环遍历选中的索引,并在模型中使用 removeRow() 方法删除对应的行。

请注意,我们在示例中使用了倒序循环来删除选中的行,这是因为在删除行之后,索引会发生变化。通过倒序遍历可以避免出现索引错位的问题。

在实际应用中,你可以根据需要进行适当的调整,例如在删除行之前进行确认,或者根据特定条件删除行。

删除多行

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值