Detailed explanation of QT QTreeView\QTreeWidget control

         This article introduces various operations of QTreeView and QTreeWidget controls in detail, such as: new interface, QTreeWidget, QTreeView, control layout, setting column, setting width and height, setting column header, setting check box, setting icon, adding tree, deleting tree , search tree, modify tree, set selection, tree sorting, event, signal, slot function, add node, default selection, .h source file, cpp source file, other articles and so on.

        In actual development, an interface may contain more than a dozen controls, and manually adjusting their positions is time-consuming and laborious. The layout manager can do two things: automatically adjust the position of the controls, including the spacing between controls, alignment, etc.; when the user resizes the window, the controls located in the layout manager will also be resized accordingly, thus maintaining the entire interface beautiful.

        This series of QT comprehensive and detailed articles currently has 28 high-quality content. This series of articles describes the basic operation and use of QT controls in more detail. Thank you for your attention, likes, and collections.

 The author of this article is original, please attach the source of the article and the link of this article for reprinting.

QT QTreeView\QTreeWidget control use detailed directory

1 New interface

2  QTreeWidget

2.1 Control Layout

2.2 Setting Columns

2.3 Set width and height

2.4 Set the header of the list

2.5 Setting checkboxes

2.6 Adding a tree

2.6.1 Add top-level items

2.6.2 Insert top-level item

2.6.3 Add subitem

2.7 Delete tree

2.7.1 Delete a sub-item

2.7.2 Deleting top-level entries

2.8 Query Tree

2.8.1 Query corresponding items

2.8.2 Query the corresponding serial number

2.9 Tree Entry Operations

2.9.1 Currently selected row and column

2.9.2 Set item selected

2.9.3 Set the selected line

2.9.4 Set the selected column

2.9.5 The previous selected row of the currently selected row

2.10 Tree sorting

2.10.1 Set up automatic sorting

2.10.2 Ascending and descending

2.11 Tree Search

2.12 Empty the tree

2.13 Folding trees

2.14 Expanding the tree

2.15 Scrolling specified items

2.16 Tree click signal

2.17 Tree double click signal

2.18 Tree expansion signals

2.19 Tree folding signals

2.20 Column data change signal

3 QTreeView

3.1 Control Layout

3.2 Adding nodes

3.3 Settings icon

3.4 Set checkBox

3.5 Selected by default

3.6 Click signal

3.7 Double click signal


1 New interface

2  QTreeWidget

2.1 Control Layout

    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列";

2.2 Setting Columns

    //设置列数
    ui->treeWidget->setColumnCount(3);

    //获取列
    ui->treeWidget->columnCount();

2.3 Set width and height

    //设置宽高
    //ui->treeWidget->resize(600,300);

2.4 Set the header of the list

topTitle << "0" << "1" << "2" << "3" << "4";
ui->treeWidget->setHeaderLabels(topTitle);

2.5 Setting checkboxes

    //设置复选框     参数1 复选框的位置 列序号    Qt::Unchecked   没选中 Qt::Checked    选中   Qt::PartiallyChecked   部分选中
    treeWidgetItem_2->setCheckState(0,Qt::PartiallyChecked);

2.6 Adding a tree

2.6.1 Add top-level items

    //添加一个顶层项目
    ui->treeWidget->addTopLevelItem(treeWidgetItem_1);
    ui->treeWidget->addTopLevelItem(treeWidgetItem_2);

2.6.2 Insert top-level item

    //插入顶层项目
    ui->treeWidget->insertTopLevelItem(0,treeWidgetItem_3);

2.6.3 Add subitem

    //给项目添加子项
    treeWidgetItem_1->addChild(treeItem_1);
    treeWidgetItem_1->addChild(treeItem_2);
    treeWidgetItem_1->addChild(treeItem_3);

2.6.4 Other added functions

        For example to get the total number of top-level items

qDebug() << "顶层总数:" << 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

2.7 Delete tree

2.7.1 Delete a sub-item

    //删除子项目
    //treeWidgetItem_1->takeChild(2);

2.7.2 Deleting top-level entries

    //删除顶级条目
    //ui->treeWidget->takeTopLevelItem(2);

2.8 Query Tree

2.8.1 Query corresponding items

    //查询控件对应条目
    qDebug() << ui->treeWidget->topLevelItem(1);

2.8.2 Query the corresponding serial number

    //查询控件顶级序号
    qDebug() << ui->treeWidget->indexOfTopLevelItem(treeWidgetItem_1);
    qDebug() << ui->treeWidget->indexOfTopLevelItem(treeWidgetItem_2);
    qDebug() << ui->treeWidget->indexOfTopLevelItem(treeWidgetItem_3);

2.9 Tree Entry Operations

2.9.1 Currently selected row and column

    qDebug() << "当前选中行: " << ui->treeWidget->currentItem();
    qDebug() << "当前选中列: " << ui->treeWidget->currentColumn();

2.9.2 Set item selected

//    void QTreeWidget::​setCurrentItem(QTreeWidgetItem * item)
//    void QTreeWidget::​setCurrentItem(QTreeWidgetItem * item, int column)

2.9.3 Set the selected line

    //设置选中行
    //ui->treeWidget->setCurrentItem(treeWidgetItem_1);

2.9.4 Set the selected column

    //设置选中某行某列
    ui->treeWidget->setCurrentItem(treeWidgetItem_1,2);

2.9.5 The previous selected row of the currently selected row

    //当前选中行 上一个选中行
    //ui->treeWidget->currentItemChanged(treeWidgetItem_1, treeWidgetItem_2);

2.10 Tree sorting

2.10.1 Set up automatic sorting

    //ui->treeWidget->isSortingEnabled();
    //ui->treeWidget->setSortingEnabled(true);

2.10.2 Ascending and descending

    //ui->treeWidget->sortByColumn(1, Qt::SortOrder::AscendingOrder);       //升序
    //ui->treeWidget->sortByColumn(1, Qt::SortOrder::DescendingOrder);      //降序

2.11 Tree Search

    QString text = "顶级条目2-第2列";
    Qt::MatchFlags flags;
    //ui->treeWidget->findItems(text, flags, 0);
    bool isEmpty = ui->treeWidget->findItems(text,Qt::MatchExactly).isEmpty();
    qDebug() << "查找: " << isEmpty;

2.12 Empty the tree

//清空控件
void MainWindow::on_pushButton_2_clicked()
{
    ui->treeWidget->clear();
}

2.13 Folding trees

//折叠控件
void MainWindow::on_pushButton_3_clicked()
{
    ui->treeWidget->collapseItem(treeWidgetItem_1);
}

2.14 Expanding the tree

//展开控件
void MainWindow::on_pushButton_4_clicked()
{
    ui->treeWidget->expandItem(treeWidgetItem_1);
}

2.15 Scrolling specified items

//滚动到指定条目
void MainWindow::on_pushButton_5_clicked()
{
    //void scrollToItem(const QTreeWidgetItem * item, QAbstractItemView::ScrollHint hint = EnsureVisible)
}

2.16 Tree click signal

void MainWindow::on_treeWidget_itemClicked(QTreeWidgetItem *item, int column)
{
    qDebug() << "单击信号: " << item << "column: " << column;
}

2.17 Tree double click signal

void MainWindow::on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column)
{
    qDebug() << "双击信号: " << item << "column: " << column;
}

2.18 Tree expansion signals

void MainWindow::on_treeWidget_itemExpanded(QTreeWidgetItem *item)
{
    qDebug() << "展开控件:" << item;
}

2.19 Tree folding signals

void MainWindow::on_treeWidget_itemCollapsed(QTreeWidgetItem *item)
{
    qDebug() << "折叠信号: " << item;
}

2.20 Column data change signal

void MainWindow::on_treeWidget_itemChanged(QTreeWidgetItem *item, int column)
{
    qDebug() << "列数据变化: " << item;
}

3 QTreeView

3.1 Control Layout

    QStandardItemModel *standardModel;
    QStandardItem *standardItem;

    //设置表头
    standardModel = new QStandardItemModel(this);
    //设置表头隐藏
    //ui->treeView->setHeaderHidden(true);
    //设置表头
    standardModel->setHorizontalHeaderLabels(QStringList()<<"0"<<"1"<<"2");
    //设置model
    ui->treeView->setModel(standardModel);
    //设置展开
    ui->treeView->expandAll();

3.2 Adding nodes

    //添加节点
    standardItem = new QStandardItem("顶级条目-0");

        standardModel->setItem(0,0,standardItem);
        QStandardItem *item00 = new QStandardItem("子条目0");
        QStandardItem *item10 = new QStandardItem("子条目1");
        QStandardItem *item20 = new QStandardItem("子条目2");

        QStandardItem *item01 = new QStandardItem("0-0");
        QStandardItem *item11 = new QStandardItem("0-1");
        QStandardItem *item21 = new QStandardItem("0-2");

        QStandardItem *item02 = new QStandardItem("0-0-0");
        QStandardItem *item12 = new QStandardItem("0-1-1");
        QStandardItem *item22 = new QStandardItem("0-2-2");

        standardModel->item(0,0)->setChild(0,0,item00);
        standardModel->item(0,0)->setChild(1,0,item10);
        standardModel->item(0,0)->setChild(2,0,item20);
        standardModel->item(0,0)->setChild(0,1,item01);
        standardModel->item(0,0)->setChild(1,1,item11);
        standardModel->item(0,0)->setChild(2,1,item21);
        standardModel->item(0,0)->setChild(0,2,item02);
        standardModel->item(0,0)->setChild(1,2,item12);
        standardModel->item(0,0)->setChild(2,2,item22);


        QStandardItem *item2 = new QStandardItem(QIcon("D:/c.png"),"顶级条目-1");
        standardModel->setItem(1,0,item2);

        QStandardItem *item200 = new QStandardItem("子条目0");
        QStandardItem *item210 = new QStandardItem("子条目1");
        QStandardItem *item220 = new QStandardItem("子条目2");

        QStandardItem *item201 = new QStandardItem("1-0");
        QStandardItem *item211 = new QStandardItem("1-1");
        QStandardItem *item221 = new QStandardItem("1-2");

        QStandardItem *item202 = new QStandardItem("1-0-0");
        QStandardItem *item212 = new QStandardItem("1-1-1");
        QStandardItem *item222 = new QStandardItem("1-2-2");

        standardModel->item(1,0)->setChild(0,0,item200);
        standardModel->item(1,0)->setChild(1,0,item210);
        standardModel->item(1,0)->setChild(2,0,item220);
        standardModel->item(1,0)->setChild(0,1,item201);
        standardModel->item(1,0)->setChild(1,1,item211);
        standardModel->item(1,0)->setChild(2,1,item221);
        standardModel->item(1,0)->setChild(0,2,item202);
        standardModel->item(1,0)->setChild(1,2,item212);
        standardModel->item(1,0)->setChild(2,2,item222);

3.3 Settings icon

QStandardItem *item2 = new QStandardItem(QIcon("D:/c.png"),"顶级条目-1");

3.4 Set checkBox

        //设置节点带checkBox
        standardModel->item(0,0)->setCheckable(true);
        standardModel->item(0,0)->setCheckState(Qt::Checked);

3.5 Selected by default

        //设置默认选中第几行
        QModelIndex index = standardModel->item(1,0)->index();
        ui->treeView->setCurrentIndex(index);

3.6 Click signal

void MainWindow::on_treeView_clicked(const QModelIndex &index)
{
    qDebug() << "单击信号 index: " << index;
}

3.7 Double click signal

void MainWindow::on_treeView_doubleClicked(const QModelIndex &index)
{
    qDebug() << "双击信号 index: " << index;
}

4 other articles

QT TextEdit Control_Gemini Breakpoint Blog-CSDN Blog_qt textedit

Detailed explanation of the use of QT QComboBox - Gemini Breakpoint Blog - CSDN Blog

Detailed explanation of QT QtableView operation

Qt QStandardItemModel (1. Super detailed usage)_ Gemini Breakpoint Blog-CSDN Blog_qstandardmodel

Qt QStandardItemModel (2. Super detailed function)_Gemini breakpoint blog-CSDN blog_qstandarditemmodel click event

Detailed use of QT QRadioButton - Gemini Breakpoint Blog - CSDN Blog - qt radiobutton

Detailed use of QT QLineEdit_ Gemini Breakpoint Blog-CSDN Blog_qt qlineedit

Detailed explanation of Qt QMessageBox use - Gemini Breakpoint Blog - CSDN Blog - qt message

QChart Line Chart, Pie Chart, Bar Chart, Curve Chart_ Gemini Breakpoint Blog-CSDN Blog_qchart Style

Detailed explanation of QChart properties_ Gemini Breakpoint Blog-CSDN Blog_setanimationoptions

Use of QCharts QValueAxis_Gemini Breakpoint Blog-CSDN Blog_qvalueaxis

Qt 5 wait prompt box (open source dynamic graph)_ Gemini Breakpoint Blog-CSDN Blog_qt wait dialog box

QtDataVisualization Data 3D Visualization_Gemini Breakpoint Blog-CSDN Blog_qtdatavisualizatio

QT QSpinBox Integer Counter Control Use Detailed Explanation_Gemini Breakpoint Blog-CSDN BlogQT
QDoubleSpinBox Floating Point Counter Control (Detailed Use)_Gemini Breakpoint Blog-CSDN Blog_qdoublespinbox Signal Slot
QT QSlider, QHorizontalSlider, QVerticalSlider Control Use Detailed Explanation_Gemini Breakpoint blog-CSDN blog_qslider set step size

Detailed explanation of the use of QT QTabWidget control - Gemini Breakpoint Blog - CSDN Blog

Detailed explanation of the use of QT QCalendarWidget control - Gemini Breakpoint Blog - CSDN Blog

Detailed use of QT QStackedWidget control - Gemini Breakpoint Blog - CSDN Blog

QT QVBoxLayout vertical layout control - Gemini Breakpoint Blog - CSDN Blog

QT QHBoxLayout Horizontal Layout Control_Gemini Breakpoint Blog-CSDN BlogQT
QGridLayout Grid Layout Control_Gemini Breakpoint Blog-CSDN Blog

QT QVerticalSpacer Spring Control_Gemini Breakpoint Blog-CSDN BlogQT
QHorizontalSpacer Spring Control_Gemini Breakpoint Blog-CSDN Blog

Guess you like

Origin blog.csdn.net/qq_37529913/article/details/131261347