QStandardItemModel丶QTableView丶QItemSelectionModel

转载Qt QStandardItemModel用法(超级详细)

Qt QStandardItemModel用法(超级详细)

QStandardItemModel 是标准的以项数据(item data)为基础的标准数据模型类,通常与 QTableView 组合成 Model/View 结构,实现通用的二维数据的管理功能。

本节介绍 QStandardltemModel 的使用,主要用到以下 3 个类:

  1. QStandardItemModel:基于项数据的标准数据模型,可以处理二维数据。维护一个二维的项数据数组,每个项是一个 QStandardltem 类的变量,用于存储项的数据、字体格式、对齐方式等。
  2. QTableView:二维数据表视图组件,有多个行和多个列,每个基本显示单元是一个单元格,通过 setModel() 函数设置一个 QStandardItemModel 类的数据模型之后,一个单元格显示 QStandardItemModel 数据模型中的一个项。
  3. QItemSelectionModel:一个用于跟踪视图组件的单元格选择状态的类,当在 QTableView 选择某个单元格,或多个单元格时,通过 QItemSelectionModel 可以获得选中的单元格的模型索引,为单元格的选择操作提供方便。


这几个类之间的关系是:QTableView 是界面视图组件,其关联的数据模型是 QStandardItem Model,关联的项选择模型是 QItemSelectionModel,QStandardItemModel 的数据管理的基本单元是 QStandardItem。

实例 samp5_3 演示 QStandardItemModel 的使用,其运行时界面如图 1 所示。


图 1 实例 samp5_3 的运行时界面


该实例具有如下功能:

  • 打开一个纯文本文件,该文件是规则的二维数据文件,通过字符串处理获取表头和各行各列的数据,导入到一个 QStandardItemModel 数据模型。
  • 编辑修改数据模型的数据,可以插入行、添加行、删除行,还可以在 QTableView 视图组件中直接修改单元格的数据内容。
  • 可以设置数据模型中某个项的不同角色的数据,包括文字对齐方式、字体是否粗体等。
  • 通过 QItemSelectionModel 获取视图组件上的当前单元格,以及选择单元格的范围,对选择的单元格进行操作。
  • 将数据模型的数据内容显示到 QPlainTextEdit 组件里,显示数据模型的内容,检验视图组件上做的修改是否与数据模型同步。
  • 将修改后的模型数据另存为一个文本文件。

界面设计与主窗口类定义

本实例的主窗口从 QMainWindow 继承而来,中间的 TableView 和 PlainTextEdit 组件采用水平分割条布局。在 Action 编辑器中创建如图 2 所示的一些 Action,并由 Action 创建主工具栏上的按钮,下方的状态栏设置了几个 QLabel 组件,显示当前文件名称、当前单元格行号、列号,以及相应内容。


图 2 实例中创建的 Action


主窗口类 MainWindow 里新增的定义如下(省略了 UI 设计器生成的界面组件的槽函数的声明):

#define FixedColumnCount 6 //文件固定 6 列
class MainWindow : public QMainWindow
{
Q_OBJECT private:
QLabel *LabCurFile; //当前文件
QLabel *LabCellPos; //当前单元格行列号
QLabel *LabCellText; //当前单元格内容
QStandardItemModel * theModel; //数据模型
QItemSelectionModel *theSelection; //选择模型
void iniModelFromStringList (QStringList&) ; //从 StringList 初始化数据模型
public:
explicit MainWindow(QWidget *parent = 0);
private slots:
//当前选择单元格发生变化
void on_currentChanged(const QModelIndex &current, const QModelIndex &previous);
private:
Ui::MainWindow *ui;
};

这里定义了数据模型变量 theModel,项数据选择模型变量 theSelection。

定义的私有函数 iniModelFromStringList() 用于在打开文件时,从一个 QStringList 变量的内容创建数据模型。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值