—均为学习笔记,如有错误请指出
一、QTreeWidget
1. 样式展示:
①
②
2. 样式代码:
①
//treeWidget树控件的使用
//设置水平头
//QStringList() 创建匿名对象,省略起名的操作
ui->treeWidget->setHeaderLabels(QStringList()<<"英雄"<<"英雄介绍");
//创建根节点
QTreeWidgetItem * liitem = new QTreeWidgetItem(QStringList()<<"力量");
QTreeWidgetItem * minitem = new QTreeWidgetItem(QStringList()<<"敏捷");
QTreeWidgetItem * zhiitem = new QTreeWidgetItem(QStringList()<<"智力");
//加载顶层的节点(根节点)
ui->treeWidget->addTopLevelItem(liitem);
ui->treeWidget->addTopLevelItem(minitem);
ui->treeWidget->addTopLevelItem(zhiitem);
//追加子节点
//力量
QStringList heroL1;
heroL1<< "刚被猪e" << "前排坦克,能在吸收伤害的同时造成可观的范围输出e" ;
QTreeWidgetItem * l1 = new QTreeWidgetItem(heroL1);
liitem->addChild(l1);
QStringList heroL2 ;
heroL2<< "船长e" << "前排坦克,能肉能输出能控场的全能英雄e" ;
QTreeWidgetItem * l2 = new QTreeWidgetItem(heroL2);
liitem->addChild(l2);
//敏捷
QStringList heroM1 ;
heroM1<< "月骑e" << "中排物理输出,可以使用分裂利刃攻击多个目标e" ;
QTreeWidgetItem * m1 = new QTreeWidgetItem(heroM1);
minitem->addChild(m1);
QStringList heroM2;
heroM2 << "小鱼人e" << "前排战士,擅长偷取敌人的属性来增强自身战力e" ;
QTreeWidgetItem * m2 = new QTreeWidgetItem(heroM2);
minitem->addChild(m2);
//智力
QStringList heroZ1;
heroZ1 << "死灵法师e" << "前排法师坦克,魔法抗性较高,拥有治疗技能e" ;
QTreeWidgetItem * z1 = new QTreeWidgetItem(heroZ1);
zhiitem->addChild(z1);
QStringList heroZ2;
heroZ2 << "巫医e" << "后排辅助法师,可以使用奇特的巫术诅咒敌人与治疗队友e" ;
QTreeWidgetItem * z2 = new QTreeWidgetItem(heroZ2);
zhiitem->addChild(z2);
②
QStringList topTitle;
QTreeWidgetItem* treeWidgetItem_1;
QTreeWidgetItem* treeWidgetItem_2;
QTreeWidgetItem* treeWidgetItem_3;
QTreeWidgetItem* treeItem_1;
QTreeWidgetItem* treeItem_2;
QTreeWidgetItem* treeItem_3;
QStringList sTreeList_1,sTreeList_2,sTreeList_3;
QStringList sTreeItemList_1,sTreeItemList_2,sTreeItemList_3;
//创建项目
treeWidgetItem_1 = new QTreeWidgetItem(sTreeList_1);
treeWidgetItem_2 = new QTreeWidgetItem(sTreeList_2);
treeWidgetItem_3 = new QTreeWidgetItem(sTreeList_3);
treeItem_1=new QTreeWidgetItem(sTreeItemList_1);
treeItem_2=new QTreeWidgetItem(sTreeItemList_2);
treeItem_3=new QTreeWidgetItem(sTreeItemList_3);
sTreeList_1 << "顶级条目0-第1列" << "顶级条目0-第2列" << "顶级条目0-第3列" << "顶级条目0-第4列" << "顶级条目0-第5列";
sTreeList_2 << "顶级条目1-第1列" << "顶级条目1-第2列" << "顶级条目1-第3列" << "顶级条目1-第4列" << "顶级条目1-第5列";
sTreeList_3 << "顶级条目2-第1列" << "顶级条目2-第2列" << "顶级条目2-第3列" << "顶级条目2-第4列" << "顶级条目2-第5列";
sTreeItemList_1 << "子条目0-第1列" << "子条目0-第2列" << "子条目0-第3列" << "子条目0-第4列" << "子条目0-第5列";
sTreeItemList_3 << "子条目1-第1列" << "子条目1-第2列" << "子条目1-第3列" << "子条目1-第4列" << "子条目1-第5列";
sTreeItemList_2 << "子条目2-第1列" << "子条目2-第2列" << "子条目2-第3列" << "子条目2-第4列" << "子条目2-第5列";
3. 用法介绍(结果参照样式②)
参考文章
1). 设置列
//设置
ui->treeWidget->setColumnCount(int number);
//获取
ui->treeWidget->columnCount();
2). 设置宽高
//设置宽高
ui->treeWidget->resize(x,y);
3).设置列表头
topTitle << "title0" << "title1" << "title2" << "title3" << "title4";
ui->treeWidget->setHeaderLabels(topTitle);
4). 设置复选框
//设置复选框
treeWidgetItem_2->setCheckState(int index,Qt::PartiallyChecked);
//参数一: 复选框的位置 列序号
//参数二: 枚举值:
Qt::Unchecked // 没选中;
Qt::Checked // 选中;
Qt::PartiallyChecked // 部分选中
5). 添加树
①. 添加顶层项目
//添加顶层项目
ui->treeWidget->addTopLevelItem(treeWidgetItem_1);
ui->treeWidget->addTopLevelItem(treeWidgetItem_2);
ui->treeWidget->addTopLevelItem(item);
②. 插入顶层项目
//插入顶层项目
ui->treeWidget->insertTopLevelItem(0,treeWidgetItem_3);
ui->treeWidget->insertTopLevelItem(int column,item);
③. 添加子项
//给项目添加子项
treeWidgetItem_1->addChild(treeItem_1);
treeWidgetItem_1->addChild(treeItem_2);
treeWidgetItem_1->addChild(treeItem_3);
item->addChild(item_); //item 顶级条目 item_ 子项
④. 其他添加函数
//获取顶层条目总数
ui->treeWidget->topLevelItemCount();
/* 树形控件顶级条目的操作比较类似 QListWidget 的列表条目操作函数。
新建条目之后,可以用如下函数把条目添加到树形控件的顶级条目列表末尾: */
//添加一个顶级条目到末尾
void QTreeWidget::addTopLevelItem(QTreeWidgetItem * item)
//添加多个顶级条目到末尾
void QTreeWidget::addTopLevelItems(const QList<QTreeWidgetItem *> & items)
//如果希望将条目插入到指定顶级条目列表的 index 序号位置,使用如下函数:
void QTreeWidget::insertTopLevelItem(int index, QTreeWidgetItem * item)
void QTreeWidget::insertTopLevelItems(int index, const QList<QTreeWidgetItem *> & items)
/* 树形控件所有的顶级条目父节点指针都为 NULL
(父节点是指树形层次中的节点关系,而条目的父控件依然是树形控件本身)。 */
//添加了顶级条目之后,可以对顶级条目进行计数:
int QTreeWidget::topLevelItemCount() const
6). 删除树
//删除子项目
treeWidgetItem_1->takeChild(2);
//删除顶级条目
ui->treeWidget->takeTopLevelItem(2);
7).查询树
① 查询对应条目
ui->treeWidget->topLevelItem(int index);
② 查询对应序号
ui->treeWidget->indexOfTopLevelItem(treeWidgetItem_1);
ui->treeWidget->indexOfTopLevelItem(treeWidgetItem_2);
ui->treeWidget->indexOfTopLevelItem(treeWidgetItem_3);
8).树条目操作
① 当前选中行、列
ui->treeWidget->currentItem();
ui->treeWidget->currentColumn();
② 设置选中行、列
//设置选中行
ui->treeWidget->setCurrentItem(treeWidgetItem_1);
//设置选中某行某列
ui->treeWidget->setCurrentItem(treeWidgetItem_1,2);
③ 设置条目选中
//设置选中行
ui->treeWidget->setCurrentItem(treeWidgetItem_1);
④ 当前选中行的上一个选中行
//当前选中行 上一个选中行
ui->treeWidget->currentItemChanged(treeWidgetItem_1, treeWidgetItem_2);
9). 树排序
① 设置自动排序
//获取
ui->treeWidget->isSortingEnabled();
//设置
ui->treeWidget->setSortingEnabled(true);
② 升序降序
//升序
ui->treeWidget->sortByColumn(1, Qt::SortOrder::AscendingOrder);
//降序
ui->treeWidget->sortByColumn(1, Qt::SortOrder::DescendingOrder);
10). 树查找
QString text = "顶级条目2-第2列";
Qt::MatchFlags flags;
ui->treeWidget->findItems(text, flags, 0);
bool isEmpty = ui->treeWidget->findItems(text,Qt::MatchExactly).isEmpty();
11). 清空树
//清空控件
void MainWindow::on_pushButton_2_clicked()
{
ui->treeWidget->clear();
}
12). 折叠树
//折叠控件
void MainWindow::on_pushButton_3_clicked()
{
ui->treeWidget->collapseItem(treeWidgetItem_1);
}
13). 展开树
//展开控件
void MainWindow::on_pushButton_4_clicked()
{
ui->treeWidget->expandItem(treeWidgetItem_1);
}
14). 滚动指定条目
//滚动到指定条目
void MainWindow::on_pushButton_5_clicked()
{
void scrollToItem(const QTreeWidgetItem * item, QAbstractItemView::ScrollHint hint = EnsureVisible)
}
15). 树单击信号
void MainWindow::on_treeWidget_itemClicked(QTreeWidgetItem *item, int column);
16). 树双击信号
void MainWindow::on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column);
17). 树展开信号
void MainWindow::on_treeWidget_itemExpanded(QTreeWidgetItem *item);
18). 树折叠信号
void MainWindow::on_treeWidget_itemCollapsed(QTreeWidgetItem *item);
19). 列数据变化信号
void MainWindow::on_treeWidget_itemChanged(QTreeWidgetItem *item, int column);
二、QTreeView
参考文章
1. 介绍
QTreeView类继承于QAbstractItemView类,提供了一个树结构视图的模型
QTreeView实现了模型中项目的树表示,模型/视图架构确保树视图的内容随着模型的变化而更新,具有子项的项目可以处于展开或折叠状态
例:构建一个树视图显示模型中的数据
QStandardItemModel *model = new QStandardItemModel;
ui->treeView->setModel(model);
//一级节点
QStandardItem * item = new QStandardItem;
item->setText("一级节点");
model->appendRow(item);
// ui->treeView->setHeaderHidden(true); //设置标题显示与否
ui->treeView->expandAll(); //设置子节点全部展开
//二级节点 (item:此二级节点的父节点)
QStandardItem * item_2= new QStandardItem;
item_2->setText("二级节点");
item_2->setCheckable(true); //设置复选框
item_2->setCheckState(Qt::Checked);
item->appendRow(item_2);
2. 样式展示:
3. 样式代码:
QStandardItemModel *model = new QStandardItemModel;
ui->treeView->setModel(model);
QStandardItem *item = new QStandardItem;
item->setText("000");
model->appendRow(item);
insterTreeNode("aaa",item);
insterTreeNode("bbb",item);
insterTreeNode("ccc",item);
insterTreeNode("ddd",item);
ui->treeView->expandAll();
void MainWindow::insterTreeNode(QString str,QStandardItem *parent)
{
QStandardItem *item = new QStandardItem;
item->setText(str);
parent->appendRow(item);
}
4. 属性
1). allColumnsShowFocus
表示项是否应该使用所有列显示键盘焦点,默认值为false
//获取
ui->treeView->allColumnsShowFocus();
//设置
//true所有列将显示焦点,否则只有一列显示
ui->treeView->setAllColumnsShowFocus(bool enable);
2). animated
表示树视图折叠或者展开分支时是否启用动画,默认为False
//获取
ui->treeView->isAnimated();
//设置
ui->treeView->setAnimated(bool enable);//false 不显示动画,true 显示动画
3). expandsOnDoubleClick
表示是否双击展开节点,默认为True
//获取
ui->treeView->expandsOnDoubleClick();
//设置
ui->treeView->setExpandsOnDoubleClick(bool enable);
4). headerHidden
表示是否隐藏头标题,默认false
//获取
ui->treeView->isHeaderHidden();
//设置
ui->treeView->setHeaderHidden(bool hide);
5). autoExpandDelay
表示在拖放操作期间打开或关闭树中的项之前的延迟时间(以毫秒为单位)。
如果时间被设置小于0,那么将不会被激活。
默认情况下值为-1,即禁用自动扩展。
//获取
ui->treeView->autoExpandDelay();
//设置
ui->treeView->setAutoExpandDelay(int delay);
6). indentation
表示树视图中每个级别的项目以像素为单位测量的缩进。对于顶级项目,缩进指定从视口边缘到第一列项目的水平距离,对于子项,它指定它们与父项之间的缩进。
默认情况下,值与样式相关。因此,当样式更改时,此属性将从它更新,调用setIndentation( )停止更新,调用resetIndentation()将恢复默认行为。
ui->treeView->indentation();
//停止更新
ui->treeView->setIndentation(int i);
//恢复默认
ui->treeView->resetIndentation();
7). itemsExpandable
表示用户是否可以交互展开和折叠项,默认true
//获取
ui->treeView->itemsExpandable();
//设置
ui->treeView->setItemsExpandable(bool enable);
8). rootlsDecorated
表示是否显示 (展开和折叠顶级项的)控件,默认为true
带有子项目的项目通常显示为展开和折叠他们的控件,从而允许显示或隐藏它们的子项目:若此属性为false,则不会为顶级项显示这些控件。这可以使单个级别的树结构看起来像一个简单的项目列表。
//获取
ui->treeView->rootIsDecorated();
//设置
ui->treeView->setRootIsDecorated(bool show);
9). sortingEnabled
表示是否启用排序,默认为false
//获取
ui->treeView->isSortingEnabled();
//设置
ui->treeView->setSortingEnabled(bool enable);
10). uniformRowHeights
表示是否让视图中的所有项目具有相同的高度,默认false
只有在保证视图中的所有项具有相同高度时,才应该将此属性设置为true
///获取
ui->treeView->uniformRowHeights();
//设置
ui->treeView->setUniformRowHeights(bool uniform);
11). wordWrap
表示是否启用换行,默认false;
启用该属性,则文本将在需要的位置进行换行;
若不换行则需要设置 textElideMode(把超出范围的值显示为省略号)
//获取
ui->treeView->wordWrap();
//设置
ui->treeView->setWordWrap(bool on);
5. 公共函数
1). columnAt
返回给定x坐标所在的行序号
ui->treeView->columnAt(int x);
2). columnViewportPosition
返回给定行号所在的视窗中的水平位置
ui->treeView->columnViewportPosition(int column);
3-1). columnWidth
返回给定行号的宽度
ui->treeView->columnWidth(int column);
3-2). setColumnWidth
设置给定行号的宽度
ui->treeView->setColumnWidth(int column,int width);
4). header
返回头标题信息,封装在QHeaderView中
QHeaderView *header() const
5). indexAbove
返回在给定模型上面的模型
QModelIndex indexAbove(const QModelIndex &index) const
6). indexBelow
返回在给定模型下面的模型
QModelIndex indexBelow(const QModelIndex &index) const
7). isColumnHidden
返回给定的列是否隐藏
QModelIndex indexBelow(const QModelIndex &index) const
8). isRowHidden
返回给定的行是否隐藏
bool isRowHidden(int row, const QModelIndex &parent) const
9-1). isFirstColumnSpanned
如果父元素给定行的第一列中的项跨越所有列,则返回true,否则返回false
bool isFirstColumnSpanned(int row, const QModelIndex &parent) const
9-2). setFirstColumnSpanned
如果span为true,则具有给定父元素的行中第一列中的项被设置为跨所有列,否则显示该行上的所有项。
void setFirstColumnSpanned(int row, const QModelIndex &parent, bool span)
10-1) . setTreePosition
指定树结构应该放在逻辑索引处。如果设置为-1,则树将始终跟随视觉索引为0
ui->treeView->setTreePosition(int index);
10-2). treePosition
返回设置树的逻辑索引。如果返回值为-1,则树被放置在可视索引0上
ui->treeView->treePosition();
6. 公共槽函数
1). collapse
折叠给定的节点
void collapse(const QModelIndex &index)
2). collapseAll
折叠全部的节点
ui->treeView->collapseAll();
3). expand
展示给定的节点
void expand(const QModelIndex &index)
4). expandAll
展示全部节点
ui->treeView->expandAll();
5). expandRecursively
将给定索引处的项目及其所有子项扩展到给定深度。(深度是相对于给定索引的)深度为-1将扩展所有子项,深度为0将仅扩展给定索引。
如果模型包含大量项目,此功能将需要一些时间来执行
void expandRecursively(const QModelIndex &index, int depth = -1)
6). expandToDepth
将所有可扩展项目扩展到给定深度;
展开节点带深度,如果是-1展开全部节点,如果是0则展开给定的索引
void expandToDepth(int depth)
7). hideColumn
隐藏给定的列
ui->treeView->hideColumn(int column);
8). resizeColumnToContents
恢复列的宽度设置
ui->treeView->resizeColumnToContents(int column);
9). showColumn
展示给定的列
ui->treeView->showColumn(int column);
10). sortByColumn
升序或降序进行排列
ui->treeView->showByColumn(int column,Qt::SortOrder order);
//例 Qt::SortOrder order = Qt::AscendingOrder
7. 信号
1). collapsed
有节点折叠的时候信号产生
void collapsed(const QModelIndex &index)
2). expand
有节点展开时信号产生
void expanded(const QModelIndex &index)