文章目录
- QTreeWidget
- QTreeWidget核心方法及信号
- QTreeWidgetItem核心属性及方法
- QTreeWidget使用示例
QTreeWidget
QTreeWidget
表示树形控件,里面每个元素都是一个QTreeWidgetItem
,每个QTreeWidgetItem
可以包含多个文本和图标,每个文本/图标都是一个列。
可以给QTreeWidget
设置顶层节点(可以有多个),然后给每个顶层节点添加子节点,从而构成树形结构。
和数据结构的树,还是有点差别。
这个树形结构没有体现出根节点,从根节点的下一层子节点开始计算的
QTreeWidget核心方法及信号
QTreeWidget核心方法:
方法 | 说明 |
---|---|
clear | 清空所有子节点 |
addTopLevelItem(QTreeWidgetItem* item) | 新增顶层节点 |
topLevelItem(int index) | 获取指定下标的顶层节点 |
topLevelItemCount() | 获取顶层节点个数 |
indexOfTopLevelItem(QTreeWidgetItem* item) | 查询指定节点是顶层节点中的下标 |
takeTopLevelItem(int index) | 删除指定的顶层节点 返回QTreeWidgetItem* 表示被删除的元素 |
currentItem() | 获取当前选中的节点,返回QTreeWidgetItem* |
setCurrentItem(QTreeWidgetItem* item) | 选中指定节点 |
setExpanded(bool) | 展开/关闭节点 |
setHeaderLabel(const QString& text) | 设置TreeWidget的header名称 |
QTreeWidget核心信号:
信号 | 说明 |
---|---|
currentItemChanged(QTreeWidgetItem* current, QTreeWidgetItem* old) | 切换选中元素时触发 |
itemClicked(QTreeWidgetItem* item, int col) | 点击元素时触发 |
itemDoubleClicked(QTreeWidgetItem* item, int col) | 双击元素触发 |
itemEntered(QTreeWidgetItem* item, int col) | 鼠标进入时触发 |
itemExpanded(QTreeWidgetItem* item) | 元素展开时触发 |
itemCollapsend(QTreeWidgetItem* item) | 元素折叠时触发 |
QTreeWidgetItem核心属性及方法
QTreeWidgetItem核心属性
属性 | 说明 |
---|---|
text | 持有的文本 |
textAlignment | 文本对齐方式 |
icon | 持有的图标 |
font | 文本字体 |
hidden | 是否隐藏 |
disabled | 是否禁用 |
expand | 是否展开 |
sizeHint | 尺寸大小 |
selected | 是否选中 |
QTreeWidgetItem核心方法:
方法 | 说明 |
---|---|
addChild(QTreeWidgetItem* child) | 新增子节点 |
childCount() | 子节点个数 |
child(int index) | 获取指定下标的子节点 返回QTreeWidgetItem* |
takeChild(int index) | 删除对应的子节点 |
removeChild(QTreeWidgetItem* child) | 删除对应的子节点 |
parent() | 获取元素父节点 |
QTreeWidget使用示例
界面属性设置:
图形化界面初始化:
代码示例:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//设置根节点名字
ui->treeWidget->setHeaderLabel("吃喝");
//新增顶层节点
QTreeWidgetItem* item1 = new QTreeWidgetItem();
item1->setText(0, "饮料");
//添加到顶层节点
ui->treeWidget->addTopLevelItem(item1);
//新增顶层节点
QTreeWidgetItem* item2 = new QTreeWidgetItem();
item2->setText(0, "泡面");
//添加到顶层节点
ui->treeWidget->addTopLevelItem(item2);
//新增顶层节点
QTreeWidgetItem* item3 = new QTreeWidgetItem();
item3->setText(0, "辣条");
//添加到顶层节点
ui->treeWidget->addTopLevelItem(item3);
//添加子节点
QTreeWidgetItem* itemChild1 = new QTreeWidgetItem();
itemChild1->setText(0, "可乐");
item1->addChild(itemChild1);
QTreeWidgetItem* itemChild2 = new QTreeWidgetItem();
itemChild2->setText(0, "雪碧");
item1->addChild(itemChild2);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_insertTopLevelItem_clicked()
{
//获取到输入框中的内容
const QString& text = ui->lineEdit->text();
//构造QTreeWidgetItem
QTreeWidgetItem* item = new QTreeWidgetItem();
item->setText(0, text);
//添加到顶层节点
ui->treeWidget->addTopLevelItem(item);
}
void Widget::on_pushButton_insertItem_clicked()
{
//获取当前选中节点
QTreeWidgetItem* curItem = ui->treeWidget->currentItem();
if(curItem == nullptr) return;
//获取到输入框中的内容
const QString& text = ui->lineEdit->text();
//构造QTreeWidgetItem
QTreeWidgetItem* item = new QTreeWidgetItem();
item->setText(0, text);
//添加到选中节点
curItem->addChild(item);
}
void Widget::on_pushButton_erase_clicked()
{
//获取当前选中节点
QTreeWidgetItem* curItem = ui->treeWidget->currentItem();
if(curItem == nullptr) return;
//删除选中元素 获取父元素,从父元素顶层删除
QTreeWidgetItem* parent = curItem->parent();
if(parent == nullptr)
{
//获取下标
int index = ui->treeWidget->indexOfTopLevelItem(curItem);
ui->treeWidget->takeTopLevelItem(index);
}
else
{
parent->removeChild(curItem);
}
}