## 今天学了什么
今天学习QtWidget组件(QListWidget、QTreeWidget、QTableWidget)以及自定义封装组合控件的方法步骤。
## Widget组件
① QListWidget(列表控件)
定义:一维平铺列表,一行一个条目,适合展示无层级的单列数据;条目:QListWidgetItem
用法:
QListWidgetItem *item=new QListWidgetItem("举头望明月");
ui->listWidget->addItem(item);
item->setTextAlignment(Qt::AlignHCenter); //设置文本居中格式 或者setItemAlignment
② QTreeWidget(树控件)
定义:树形层级结构,支持展开/折叠父子节点,适合目录、层级数据;条目:QTreeWidgetItem
用法:
ui->treeWidget->setHeaderLabels(QStringList() <<"角色"<<"技能");
QTreeWidgetItem *treeitem=new QTreeWidgetItem(QStringList()<<"辅助");
ui->treeWidget->addTopLevelItem(treeitem); //顶层节点
QList<QString> list2;
list2<<"蔡文姬"<<"一技能 治疗";
QTreeWidgetItem *itemChild=new QTreeWidgetItem(list2);
treeitem->addChild(itemChild); //添加子节点
③ QTableWidget(表格控件)
定义:多行多列的表格,单元格形式展示,适合二维表格数据;条目:QTableWidgetItem
用法:
ui->tableWidget->setColumnCount(3);
ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"年龄"<<"职业");
ui->tableWidget->setRowCount(2);
//添加内容
ui->tableWidget->setItem(0,0,new QTableWidgetItem(“张飞”));
共同点:
- 都属于Item-based 现成视图控件,继承自Widget,可直接拖UI或new使用;
- 内部自带封装好的Model,开箱即用,无需自定义Model;
- 通过各自的xxxItem来管理每一项的内容、样式;
- 支持选中、点击、信号槽等基础交互;
区别:
展示结构不同:
- QListWidget:一维平铺
- QTreeWidget:层级父子树结构(可展开折叠)
- QTableWidget:二维多行多列表格
添加条目的接口不同:
- QListWidget:addItem
- QTreeWidget:addTopLevelItem,子节点用addChild
- QTableWidget:setItem(行,列,item)
使用场景不同:
- QList:简单单列清单
- QTree:目录、层级关系(文件树)
- QTable:表格、台账(类似Excel)
注:QListView/QTreeView/QTableView:纯视图,无内置Model,必须自己写自定义Model。
## 自定义封装组合控件
步骤:
① 添加新文件

② 设置封装控件

③ Widget中使用 –右键–提升为(提升操作,要求Designer中的基类,必须和自定义控件继承的父类保持一致;间接继承的不能随便跨级提升。)

④ 根据需求实现功能。

