当前位置: 首页 > article >正文

Qt常用控件 多元素控件

文章目录

  • 1. QListWidget
    • 1.1 常用属性和方法
    • 1.2 常用信号
    • 1.4 例子1,操作元素
  • 2. QTableWidget
    • 2.1 常用属性和方法
    • 2.2 常用信号
    • 2.3 例子1,创建表格
    • 3.1 常用属性和方法
    • 3.2 常用信号
    • 3.3 例子1,创建树形结构

Qt中提供的多元素控件有:

  • QListWidget
  • QListView
  • QTableWidget
  • QTableView
  • QTreeWidget
  • QTreeView

xxWidgetxxView之间的区别:

  • xxWidget
    • xxWidget 属于便捷类控件,它将数据存储和显示逻辑集成在一起,提供了一种简单直接的方式来创建和管理表格、树形结构等界面元素。开发者无需过多关注数据模型的设计,就能快速搭建出具有基本功能的界面。(简单,但是拓展性低)
  • xxView
    • xxView 基于模型 - 视图 - 控制器(MVC)架构设计,遵循分离原则,将数据的存储(模型)和显示(视图)分离开来。这种设计使得数据和界面的管理更加灵活,方便进行数据的修改、扩展和复用。(复杂,但是拓展性高)

1. QListWidget

QListWidget表示一个纵向的列表

1.1 常用属性和方法

属性

属性说明类型读写性取值范围或可能值
currentRow表示当前被选中的行的索引,索引从 0 开始计数。通过该属性可以获取当前选中行的位置,也可以设置选中某一行。int读写取值范围为 -1 到 count - 1,-1 表示没有选中任何行。
count指示 QListWidget 中一共存在的行数,也就是列表项的数量。可以使用该属性获取列表的大小。int只读大于等于 0 的整数
sortingEnabled决定是否允许对列表中的项进行排序。当设置为 true 时,用户可以通过某些操作(如点击表头)对列表项进行排序;设置为 false 时,列表项保持添加时的顺序。bool读写truefalse
isWrapping用于设置列表项是否允许换行显示。若设置为 true,当列表项的内容过长时,会自动换行显示;设置为 false 时,内容会以单行显示,超出部分可能会被截断。bool读写truefalse
itemAlignment定义列表项中文本或元素的对齐方式,例如左对齐、右对齐、居中对齐等。可以根据需要调整列表项内容的显示位置。Qt::Alignment读写常见取值如 Qt::AlignLeftQt::AlignRightQt::AlignCenter
selectRectVisible控制被选中的元素的矩形边框是否可见。设置为 true 时,选中的列表项会显示一个矩形边框以突出显示;设置为 false 时,不显示该边框。bool读写truefalse
spacing指定列表中各个元素(列表项)之间的间隔大小。通过调整该属性,可以改变列表项之间的间距,从而影响列表的布局和外观。int读写大于等于0的整数

方法

方法方法原型说明参数返回值
addItemvoid addItem(const QString &label) void addItem(QListWidgetItem *item)向列表中添加元素。第一个重载方法接受一个字符串作为元素的文本标签;第二个重载方法接受一个 QListWidgetItem 对象指针,可以自定义元素的属性(如图标、字体等)。1. const QString &label:要添加元素的文本标签。 2. QListWidgetItem *item:要添加的 QListWidgetItem 对象指针。void
currentItemQListWidgetItem *currentItem() const返回当前选中的元素。返回的是一个 QListWidgetItem 对象指针,可以通过该指针访问和修改选中元素的属性。QListWidgetItem *:当前选中的元素指针,若没有选中元素则返回 nullptr
setCurrentItemvoid setCurrentItem(QListWidgetItem *item)设置选中哪个元素。将指定的 QListWidgetItem 对象设置为当前选中元素。QListWidgetItem *item:要设置为选中状态的元素指针。void
setCurrentRowvoid setCurrentRow(int row)设置选中第几行的元素。通过行索引来指定要选中的元素。int row:要选中元素的行索引,索引从 0 开始。void
insertItemvoid insertItem(int row, const QString &label) void insertItem(int row, QListWidgetItem *item)在指定的位置插入元素。第一个重载方法接受一个行索引和一个字符串标签,将带有该标签的元素插入到指定行;第二个重载方法接受一个行索引和一个 QListWidgetItem 对象指针,将该对象插入到指定行。1. int row:要插入元素的行索引。 2. const QString &label:要插入元素的文本标签。 3. QListWidgetItem *item:要插入的 QListWidgetItem 对象指针。void
itemQListWidgetItem *item(int row) const返回指定行的元素。通过行索引获取对应行的 QListWidgetItem 对象指针。int row:要获取元素的行索引,索引从 0 开始。QListWidgetItem *:指定行的元素指针,若行索引超出范围则返回 nullptr
takeItemQListWidgetItem *takeItem(int row)删除指定行的元素,并返回被删除的元素指针。删除后,该元素不再属于 QListWidget,但指针仍然有效,需要手动管理其内存。int row:要删除元素的行索引,索引从 0 开始。QListWidgetItem *:被删除的元素指针,若行索引超出范围则返回 nullptr

1.2 常用信号

信号信号原型说明参数
currentItemChangedvoid currentItemChanged(QListWidgetItem *current, QListWidgetItem *old)当选中的元素发生改变时触发该信号。可用于在用户切换选中元素时执行相应的操作,比如更新其他界面元素显示选中元素的详细信息等。1. QListWidgetItem *current:当前新选中的元素指针。 2. QListWidgetItem *old:之前被选中的元素指针。
currentRowChangedvoid currentRowChanged(int currentRow)同样在选中的元素改变时触发,不过此信号传递的是当前选中元素所在的行号。适用于根据行号进行一些逻辑处理的场景。int currentRow:当前选中元素的行号,行号从 0 开始计数。
itemClickedvoid itemClicked(QListWidgetItem *item)当用户点击列表中的某个元素时触发该信号。常用于实现点击元素后的特定操作,如打开一个新窗口显示元素详情等。QListWidgetItem *item:被点击的元素指针。
itemDoubleClickedvoid itemDoubleClicked(QListWidgetItem *item)当用户双击列表中的某个元素时触发该信号。常见应用场景是通过双击元素执行一些更深入的操作,例如打开文件等。QListWidgetItem *item:被双击的元素指针。
itemEnteredvoid itemEntered(QListWidgetItem *item)当鼠标指针进入列表中的某个元素区域时触发该信号。可用于实现鼠标悬停效果,如改变元素的显示样式等。QListWidgetItem *item:鼠标进入的元素指针。

##1.3 QListWidgetItem

这个类表示QListWidget的一个元素。下面是常用方法

方法方法原型说明参数返回值
setFontvoid setFont(const QFont &font)用于设置列表项的字体样式,包括字体的类型、大小、加粗、倾斜等属性。const QFont &font:一个 QFont 对象,包含了要设置的字体信息。void
setIconvoid setIcon(const QIcon &icon)为列表项设置图标,图标会显示在列表项文本的旁边,增强列表项的可视化效果。const QIcon &icon:一个 QIcon 对象,代表要设置的图标。void
setHiddenvoid setHidden(bool hide)控制列表项是否隐藏。当设置为 true 时,列表项将不可见;设置为 false 时,列表项正常显示。bool hidetrue 表示隐藏列表项,false 表示显示列表项。void
setSizeHintvoid setSizeHint(const QSize &size)设置列表项的推荐尺寸,列表项会尽量按照指定的尺寸进行显示。这在需要自定义列表项大小的场景中很有用。const QSize &size:一个 QSize 对象,包含了列表项的宽度和高度信息。void
setSelectedvoid setSelected(bool select)设置列表项是否处于选中状态。当设置为 true 时,列表项会被选中;设置为 false 时,列表项会取消选中状态。bool selecttrue 表示选中列表项,false 表示取消选中。void
setTextvoid setText(const QString &text)用于设置列表项显示的文本内容。const QString &text:要设置的文本字符串。void
setTextAlignmentvoid setTextAlignment(int alignment)设置列表项中文本的对齐方式,例如左对齐、右对齐、居中对齐等。int alignment:对齐方式的标志,可以使用 Qt::Alignment 枚举值,如 Qt::AlignLeftQt::AlignRightQt::AlignCenter 等。void

1.4 例子1,操作元素

Qt Designer中设置基本框架

image-20250201163932343

给两个按钮添加槽函数

void Widget::on_pushButton_add_clicked()
{
    QString text = ui->lineEdit->text();
    if(text == "" || text.size() == 0) {
        qDebug() << "Empty...";
        return;
    } else {
        ui->listWidget->addItem(text);
    }
}

void Widget::on_pushButton_del_clicked()
{
    int row = ui->listWidget->currentRow();
    if(row == -1) {
        qDebug() << "Not even one row selected";
        return;
    } else {
        ui->listWidget->takeItem(row);
    }
}

运行结果如下

image-20250201164004846

2. QTableWidget

QTableWidget表示表格控件

2.1 常用属性和方法

属性具体见1.1。有两个独有的属性columnCountrowCount,分别表示表格列数和行数

下面是常用方法

方法方法原型说明参数返回值
itemQTableWidgetItem *item(int row, int column) const根据指定的行和列获取表格中对应位置的 QTableWidgetItem 指针。若该位置没有元素,则返回 nullptrint row:行索引,从 0 开始计数。 int column:列索引,从 0 开始计数。QTableWidgetItem *:指定位置的 QTableWidgetItem 指针,若无则为 nullptr
setItemvoid setItem(int row, int column, QTableWidgetItem *item)在指定的行和列位置设置一个 QTableWidgetItem 元素。若该位置已有元素,会被新元素替换。int row:行索引,从 0 开始计数。 int column:列索引,从 0 开始计数。 QTableWidgetItem *item:要设置的 QTableWidgetItem 指针。void
currentItemQTableWidgetItem *currentItem() const返回当前被选中的 QTableWidgetItem 元素的指针。若没有选中元素,则返回 nullptrQTableWidgetItem *:当前选中元素的指针,若无则为 nullptr
currentRowint currentRow() const返回当前被选中元素所在的行号。若没有选中元素,则返回 -1。int:当前选中元素的行号,若无选中元素则为 -1。
currentColumnint currentColumn() const返回当前被选中元素所在的列号。若没有选中元素,则返回 -1。int:当前选中元素的列号,若无选中元素则为 -1。
rowint row(const QTableWidgetItem *item) const获取指定 QTableWidgetItem 元素所在的行号。若该元素不在表格中,则返回 -1。const QTableWidgetItem *item:要查询的 QTableWidgetItem 指针。int:指定元素所在的行号,若元素不在表格中则为 -1。
columnint column(const QTableWidgetItem *item) const获取指定 QTableWidgetItem 元素所在的列号。若该元素不在表格中,则返回 -1。const QTableWidgetItem *item:要查询的 QTableWidgetItem 指针。int:指定元素所在的列号,若元素不在表格中则为 -1。
rowCountint rowCount() const获取表格的行数。int:表格的行数。
columnCountint columnCount() const获取表格的列数。int:表格的列数。
insertRowvoid insertRow(int row)在指定的行位置插入一个新行。原来位于该行及以下的行都会向下移动一行。int row:要插入新行的行索引,从 0 开始计数。void
insertColumnvoid insertColumn(int column)在指定的列位置插入一个新列。原来位于该列及以后的列都会向右移动一列。int column:要插入新列的列索引,从 0 开始计数。void
removeRowvoid removeRow(int row)删除指定行的所有元素,并将该行从表格中移除。原来位于该行以下的行都会向上移动一行。int row:要删除的行索引,从 0 开始计数。void
removeColumnvoid removeColumn(int column)删除指定列的所有元素,并将该列从表格中移除。原来位于该列以后的列都会向左移动一列。int column:要删除的列索引,从 0 开始计数。void
setHorizontalHeaderItemvoid setHorizontalHeaderItem(int column, QTableWidgetItem *item)设置指定列的水平表头元素。int column:要设置表头的列索引,从 0 开始计数。 QTableWidgetItem *item:用于作为表头的 QTableWidgetItem 指针。void
setVerticalHeaderItemvoid setVerticalHeaderItem(int row, QTableWidgetItem *item)设置指定行的垂直表头元素。int row:要设置表头的行索引,从 0 开始计数。 QTableWidgetItem *item:用于作为表头的 QTableWidgetItem 指针。void

QTableWidgetItem属性与上面类似

2.2 常用信号

信号信号原型说明参数
cellClickedvoid cellClicked(int row, int column)当用户点击表格中的某个单元格时,会触发该信号。常用于在用户点击单元格后执行相应的操作,比如显示单元格详细信息、进行数据编辑等。int row:被点击单元格所在的行号,行号从 0 开始计数。 int column:被点击单元格所在的列号,列号从 0 开始计数。
cellDoubleClickedvoid cellDoubleClicked(int row, int column)当用户双击表格中的某个单元格时,此信号会被触发。通常用于实现一些需要双击操作激活的功能,例如打开一个新窗口展示单元格关联的数据等。int row:被双击单元格所在的行号,行号从 0 开始计数。 int column:被双击单元格所在的列号,列号从 0 开始计数。
cellEnteredvoid cellEntered(int row, int column)当鼠标指针进入表格中的某个单元格区域时,会触发该信号。可用于实现鼠标悬停效果,如改变单元格的背景颜色、显示提示信息等。int row:鼠标进入单元格所在的行号,行号从 0 开始计数。 int column:鼠标进入单元格所在的列号,列号从 0 开始计数。
currentCellChangedvoid currentCellChanged(int row, int column, int previousRow, int previousColumn)当选中的单元格发生变化时,该信号会被触发。参数中包含了当前选中单元格的行号和列号,以及之前选中单元格的行号和列号。可用于跟踪用户选择单元格的操作,更新相关的界面显示或执行特定的逻辑处理。int row:当前选中单元格所在的行号,行号从 0 开始计数。 int column:当前选中单元格所在的列号,列号从 0 开始计数。 int previousRow:之前选中单元格所在的行号,行号从 0 开始计数。 int previousColumn:之前选中单元格所在的列号,列号从 0 开始计数。

2.3 例子1,创建表格

Qt Designer中设置基本框架

image-20250202130703024

widget.cpp如下

#include "widget.h"
#include <QDebug>
#include "ui_widget.h"

Widget::Widget(QWidget* parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    const static int N = 3;
    for (int i = 0; i < N; ++i) {
        // 建行和建列
        ui->tableWidget->insertRow(i);
        ui->tableWidget->insertColumn(i);
    }
    // 设置列名
    ui->tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("学号"));
    ui->tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("姓名"));
    ui->tableWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("电话"));

    // 设置初始值, 第0行
    ui->tableWidget->setItem(0, 0, new QTableWidgetItem("20241001"));
    ui->tableWidget->setItem(0, 1, new QTableWidgetItem("小A"));
    ui->tableWidget->setItem(0, 2, new QTableWidgetItem("1561111000"));
    // 第1行
    ui->tableWidget->setItem(1, 0, new QTableWidgetItem("20241002"));   // 第1行,第0列
    ui->tableWidget->setItem(1, 1, new QTableWidgetItem("小B"));        // 第1行,第1列
    ui->tableWidget->setItem(1, 2, new QTableWidgetItem("1561111001")); // 第1行,第2列
    // 第2行
    ui->tableWidget->setItem(2, 0, new QTableWidgetItem("20241003"));   // 第2行,第0列
    ui->tableWidget->setItem(2, 1, new QTableWidgetItem("小C"));        // 第2行,第1列
    ui->tableWidget->setItem(2, 2, new QTableWidgetItem("1561111002")); // 第2行,第2列
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_add_row_btn_clicked()
{
    int rowCount = ui->tableWidget->rowCount();
    ui->tableWidget->insertRow(rowCount);
}

void Widget::on_del_row_btn_clicked()
{
    int curRow = ui->tableWidget->currentRow();
    if (curRow == -1) {
        qDebug() << "Row not even exist...";
        return;
    }
    ui->tableWidget->removeRow(curRow);
}

void Widget::on_add_col_btn_clicked()
{
    QString text = ui->lineEdit->text();
    if (text.isEmpty()) {
        qDebug() << "LineEdit text empty...";
        return;
    }
    int colCount = ui->tableWidget->columnCount();
    ui->tableWidget->insertColumn(colCount);
    ui->tableWidget->setHorizontalHeaderItem(colCount, new QTableWidgetItem(text));
}

void Widget::on_del_col_btn_clicked()
{
    int curCol = ui->tableWidget->currentColumn();
    if (curCol == -1) {
        qDebug() << "Column not even exist...";
        return;
    }
    ui->tableWidget->removeColumn(curCol);
}

运行结果如下

image-20250202130635672

#3. QTreeWidget

QTreeWidget表示一个树形控件,每个元素都是一个QTreeWidgetItem,每个QTreeWidgetItem可以包含多个文本和图片。

注意QTreeWidget虽然是树形结构,但是这个树形结构并没有体现出根节点,而是从根节点的下一层开始计算的。该层节点就叫做顶层节点(TopLevelItem)。

3.1 常用属性和方法

方法方法原型说明参数返回值
clearvoid clear()清空 QTreeWidget 中的所有子节点,包括顶层节点及其子节点,将树状结构恢复为空状态。void
addTopLevelItemvoid addTopLevelItem(QTreeWidgetItem *item)QTreeWidget 中新增一个顶层节点。顶层节点是树状结构中最上层的节点。QTreeWidgetItem *item:要添加的顶层节点指针void
topLevelItemQTreeWidgetItem *topLevelItem(int index) const根据指定的下标获取对应的顶层节点。int index:顶层节点的下标,从 0 开始计数QTreeWidgetItem *:指定下标的顶层节点指针,如果下标超出范围则返回 nullptr
topLevelItemCountint topLevelItemCount() const获取 QTreeWidget 中顶层节点的个数。int:顶层节点的数量
indexOfTopLevelItemint indexOfTopLevelItem(QTreeWidgetItem *item) const查询指定的节点在顶层节点中的下标。QTreeWidgetItem *item:要查询的节点指针int:指定节点在顶层节点中的下标,如果该节点不是顶层节点则返回 -1
takeTopLevelItemQTreeWidgetItem *takeTopLevelItem(int index)删除指定下标的顶层节点,并返回被删除的节点指针。调用该方法后,被删除的节点不再属于 QTreeWidget,需要手动管理其内存。int index:要删除的顶层节点的下标,从 0 开始计数QTreeWidgetItem *:被删除的顶层节点指针,如果下标超出范围则返回 nullptr
currentItemQTreeWidgetItem *currentItem() const获取当前被选中的节点。QTreeWidgetItem *:当前选中的节点指针,如果没有选中节点则返回 nullptr
setCurrentItemvoid setCurrentItem(QTreeWidgetItem *item)将指定的节点设置为当前选中节点。QTreeWidgetItem *item:要设置为选中状态的节点指针void
setExpandedvoid setExpanded(bool expanded)展开或关闭 QTreeWidget 中的所有节点。当参数为 true 时,所有节点展开;当参数为 false 时,所有节点关闭。bool expandedtrue 表示展开节点,false 表示关闭节点void
setHeaderLabelvoid setHeaderLabel(const QString &text)设置 QTreeWidget 的表头标签文本。表头位于树状结构的顶部,用于标识各列的含义。const QString &text:要设置的表头标签文本void

下面是QTreeWidgetItem的部分方法

方法方法原型说明参数返回值
addChildvoid addChild(QTreeWidgetItem *child)为当前 QTreeWidgetItem 新增一个子节点。新增的子节点会显示在当前节点的下一级。QTreeWidgetItem *child:要添加的子节点指针void
childCountint childCount() const获取当前 QTreeWidgetItem 的子节点个数。可用于判断当前节点下是否有子节点以及子节点的数量。int:子节点的数量
childQTreeWidgetItem *child(int index) const根据指定的下标获取当前 QTreeWidgetItem 的子节点。int index:子节点的下标,从 0 开始计数QTreeWidgetItem *:指定下标的子节点指针,如果下标超出范围则返回 nullptr
takeChildQTreeWidgetItem *takeChild(int index)删除当前 QTreeWidgetItem 对应下标的子节点,并返回被删除的子节点指针。调用该方法后,被删除的子节点不再属于当前节点,需要手动管理其内存。int index:要删除的子节点的下标,从 0 开始计数QTreeWidgetItem *:被删除的子节点指针,如果下标超出范围则返回 nullptr
removeChildvoid removeChild(QTreeWidgetItem *child)从当前 QTreeWidgetItem 中删除指定的子节点。与 takeChild 不同,该方法不返回被删除的子节点指针。QTreeWidgetItem *child:要删除的子节点指针void
parentQTreeWidgetItem *parent() const获取当前 QTreeWidgetItem 的父节点。如果当前节点是顶层节点,则返回 nullptrQTreeWidgetItem *:父节点的指针,如果没有父节点则返回 nullptr

3.2 常用信号

信号信号原型说明参数
currentItemChangedvoid currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *old)QTreeWidget 中选中的元素发生切换时,该信号会被触发。可用于在用户改变选中节点时执行相应的操作,比如更新界面上显示的节点详细信息等。1. QTreeWidgetItem *current:当前新选中的节点指针。 2. QTreeWidgetItem *old:之前被选中的节点指针。
itemClickedvoid itemClicked(QTreeWidgetItem *item, int col)当用户点击 QTreeWidget 中的某个元素时,此信号会被触发。常用于实现点击节点后的特定功能,例如展开子节点、显示关联数据等。1. QTreeWidgetItem *item:被点击的节点指针。 2. int col:被点击节点所在的列索引,列索引从 0 开始计数。
itemDoubleClickedvoid itemDoubleClicked(QTreeWidgetItem *item, int col)当用户双击 QTreeWidget 中的某个元素时,该信号会被触发。通常用于执行一些需要双击操作激活的功能,比如打开一个新窗口展示节点的详细内容等。1. QTreeWidgetItem *item:被双击的节点指针。 2. int col:被双击节点所在的列索引,列索引从 0 开始计数。
itemEnteredvoid itemEntered(QTreeWidgetItem *item, int col)当鼠标指针进入 QTreeWidget 中的某个元素区域时,该信号会被触发。可用于实现鼠标悬停效果,如改变节点的显示样式、显示提示信息等。1. QTreeWidgetItem *item:鼠标进入的节点指针。 2. int col:鼠标进入节点所在的列索引,列索引从 0 开始计数。
itemExpandedvoid itemExpanded(QTreeWidgetItem *item)QTreeWidget 中的某个元素被展开时,该信号会被触发。可用于在节点展开时执行一些额外的操作,比如加载子节点的数据等。QTreeWidgetItem *item:被展开的节点指针。
itemCollapsedvoid itemCollapsed(QTreeWidgetItem *item)QTreeWidget 中的某个元素被折叠时,该信号会被触发。可用于在节点折叠时执行一些清理操作,比如释放子节点占用的资源等。QTreeWidgetItem *item:被折叠的节点指针。

3.3 例子1,创建树形结构

Qt Designer中设置基本框架

image-20250203222814528

widget.cpp如下

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget* parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    // 设置列数
    ui->treeWidget->setColumnCount(2);
    // 设置表头标签文本
    ui->treeWidget->setHeaderLabels(QStringList() << "名称" << "english");
    // 添加顶层节点
    addTopLevelItemWithText(0, "姓名");
    addTopLevelItemWithText(0, "电话");
    addTopLevelItemWithText(1, "name");
    addTopLevelItemWithText(1, "phone");
}

Widget::~Widget()
{
    delete ui;
}

// 辅助函数, 添加顶层节点并设置文本
void Widget::addTopLevelItemWithText(int column, const QString &text)
{
    QTreeWidgetItem* item = new QTreeWidgetItem();
    item->setText(column, text);
    ui->treeWidget->addTopLevelItem(item);
}

void Widget::on_addToTop_clicked()
{
    QString text = ui->lineEdit->text();
    if(text.isEmpty()) {
        return;
    }
    addTopLevelItemWithText(0, text);
    addTopLevelItemWithText(1, text + "abc");       // 这里可以加个哈希表
}

void Widget::on_addToSelect_clicked()
{
    QString text = ui->lineEdit->text();
    if(text.isEmpty()) {
        return;
    }
    QTreeWidgetItem* cur = ui->treeWidget->currentItem();
    if(cur == nullptr) {
        return;
    }
    QTreeWidgetItem* item = new QTreeWidgetItem();
    item->setText(cur->columnCount()-1, text);
    cur->addChild(item);
}

void Widget::on_removeSelect_clicked()
{
    auto cur = ui->treeWidget->currentItem();
    if(cur == nullptr) {
        return;
    }
    auto parent = cur->parent();
    if(parent != nullptr) {
        // 不是顶层节点
        parent->removeChild(cur);
        delete cur;
    } else {
        // 是顶层节点
        int index = ui->treeWidget->indexOfTopLevelItem(cur);       // 获取下标
        ui->treeWidget->takeTopLevelItem(index);
    }
}

运行结果如下

image-20250203222739302


http://www.kler.cn/a/532588.html

相关文章:

  • Spring Bean 的生命周期介绍
  • e2studio开发RA2E1(5)----GPIO输入检测
  • vim-plug的自动安装与基本使用介绍
  • 【集成Element Plus】
  • VoIP中常见术语
  • C语言教程——文件处理(2)
  • 2.4学习内容
  • 代码随想录算法【Day36】
  • C++ 仿函数
  • babel-安装和使用
  • sort排序 计数排序 map set C++ 蓝桥杯
  • 实验13 JavaBean(二)
  • ROS-激光雷达-消息包格式-获取激光雷达数据-激光雷达避障
  • RabbitMQ深度探索:前置知识
  • 游戏引擎 Unity - Unity 打开项目、Unity Editor 添加简体中文语言包模块、Unity 项目设置为简体中文
  • 【435. 无重叠区间 中等】
  • K8s 分布式存储后端(K8s Distributed Storage Backend)
  • 基础IOIO
  • PHP 调用 DeepSeek API 完整指南
  • 【字节青训营-7】:初探 Kitex 字节微服务框架(使用ETCD进行服务注册与发现)
  • 机器学习day8
  • sql中奇数、偶数、正则
  • 【L2JMobius】ZGC requires Windows version 1803 or later
  • 宝塔面板端口转发其它端口至MySQL的3306
  • 关于大模型 AGI 应知应会_生在AI发展的时代
  • 51单片机入门_05_LED闪烁(常用的延时方法:软件延时、定时器延时;while循环;unsigned char 可以表示的数字是0~255)