Qt学习-22 <QTreeWidget & QTreeView>

—均为学习笔记,如有错误请指出


一、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)

  • 23
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值