QTreeWidgetQTreeWidget

本文详细介绍了Qt框架中的QTreeWidget组件,包括其常用属性、标题设置、内容插入和选择、拖动删除功能、信号事件的使用。此外,还展示了如何自定义QTreeWidget的样式,如行列颜色交替、选中和悬停样式、收缩和展开图片以及标题样式。通过示例代码,演示了如何创建、插入数据、响应用户交互等操作,为Qt开发者提供了全面的QTreeWidget使用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QTreeWidget
1.常用属性
2.标题设置
3.内容插入
4.内容选择
5.拖动和删除
6.信号事件
7.样式qss

QTreeWidget 属性

1.header()->setVisible(true)
2.setSortingEnabled点击标题排序
3.setAnimated 动画展开
4.setVerticalScrollBarPolicy setHorizontalScrollBarPolicy滚动条
5.selectionMode 单选,、多选,Ctrl,Shift
6.setSelectionBehavior 选择行,列,一项

QTreeWidget 标题

1.QTreeWidgetItem \*h = null;
2.tree->setHeaderItem(new QTreeWidgetItem());
3.h = tree->headerItem();
4.h->setText(0,QStringLiteral("标题1"))

QTreeWidget插入读取

1.insertTopLevelItem(int index,QTreeWidgetItem \*item)
2.addTopLevelItem(QTreeWidgetItem* item);
3.new QTreeWidgetItem(treeWidget);
4.QTreeWidgetItem \*topLevelItem(int index) const
5.int topLevelItemCount() const;
6.void setItemWidget(QTreeWidgetItem* Item, int column,QWidget \*widget);
7.QList<QTreeWidgetItem*> selectedItems() const
8.void setColumnCount(int columns)

QTreeWidgetItem


1.void addChild(QTreeWidgetItem* child)
2.void addChildren(const QList<QTreeWidgetItem *> &children);
3.void setText(int column,const QString &text)
4.QTreeWidgetItem \*parent() const
5.QTreeWidgetItem \*treeWidget() const

QTreeWidget 槽函数


1.void collapseltem(const QTreeWidgetItem \*item);
2.void expandItem(const QTreeWidgetItem \*item);

QTreeWidget 信号函数


1.currentItemChanged(QTreeWidgetItem \*current QTreeWidgetItem \*previous)
2.itemActivated(QTreeWidgetItem \*item, int column)
3.itemChanged(QTreeWidgetItem \*item, int column)
4.itemClicked(QTreeWidgetItem \*item, int column)
5.itemCollapsed(QTreeWidgetItem \*item);
6.itemDoubleClicked(QTreeWidgetItem \*item,int column);
7.itemEntered(QTreeWidgetItem \*item,int column);
8.itemExpanded(QTreeWidgetItem \*item);
9.itemPressed(QTreeWidgetItem \*item,int column);
10.itemSelectionChanged()

QTreeWidget样式
1.行列样式(颜色交替)
2.选中和悬停样式
3.收缩和展开图片替换
4.标题样式

QTreeWidget 行列样式


setAlternatingRowColors(true)
QTreeView{
    background-color:#FEFFF7;
    alternate-background-color:#CBE8D9;
}

QTreeWidget 选中和悬停样式

QTreeView::item{
    border:1px solid #C5DAFF;
}

QTreeView::item::hover{
    background:#C5DAFF;
}

QTreeView::item::selected{
    background:#DEBBE8;
}

QTreeView::branch:has-sibings:!adjoins-item{
    border-image:url(vline.png)0;
}

QTreeView::branch:has-sibings:adjoins-item{
    border-image:url(branch-more.png) 0;
}

QTreeView::branch:!has-children:!has-siblings:adjoins-item{
    border-image:url(branch-end.png) 0;
}

QTreeView::branch:has-children:!has-siblings:closed,
QTreeView::branch:closed:has-children:has-siblings{
    border-image:none;image:url(branch-closed.png);
}

QTreeView::branch:open:has-children:!has-siblings,
QTreeView::branch:open:has-children:has-siblings{
    border-image:none;
    image:url(branch-open.png);
}

QTreeWidget标题样式

QHeaderView::section{
    background-color:#FFEOD8;
    border:1px solid #C5DAFF;
}

widget.cpp


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

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //清理测试的标题,不清理数据
    //ui->treeWidget->setColumnCount(0); //不会清理
    ui->treeWidget->setHeaderItem(new QTreeWidgetItem());

    //清理测试数据
    ui->treeWidget->clear();

    //ui->treeWidget->setColumnCount(3);
    //设置标题,设置三列
    ui->treeWidget->headerItem()->setText(0,"head1");
    ui->treeWidget->headerItem()->setText(1,"head2");
    ui->treeWidget->headerItem()->setText(2,"head3");
    ui->treeWidget->headerItem()->setText(3,"head4");
    
    qDebug()<<"ColumnCount "<<ui->treeWidget->columnCount();

    //插入数据
    //结尾插入
    ui->treeWidget->addTopLevelItem(new QTreeWidgetItem());
    ui->treeWidget->topLevelItem(0)->setText(0,"tree node1");
    ui->treeWidget->topLevelItem(0)->setText(1,"tree node1 col2");
    ui->treeWidget->addTopLevelItem(new QTreeWidgetItem({"tree node2 col1","tree node2 col2"}));

    //开头插入
    ui->treeWidget->insertTopLevelItem(0,new QTreeWidgetItem({"tree node1-1 cell","tree node-1 col2"}));

    //结尾插入
    ui->treeWidget->insertTopLevelItem(ui->treeWidget->topLevelItemCount(),new QTreeWidgetItem({"tree node and cell"}));

    //结尾插入
    QTreeWidgetItem *node = new QTreeWidgetItem(ui->treeWidget);
    node->setText(0,"new ");

    //插入五个节点
    ui->treeWidget->topLevelItem(0)->addChild(new QTreeWidgetItem({"child1"}));
    ui->treeWidget->topLevelItem(0)->addChild(new QTreeWidgetItem({"child2"}));
    ui->treeWidget->topLevelItem(0)->addChild(new QTreeWidgetItem({"child3"}));

    ui->treeWidget->topLevelItem(0)->child(1)->addChild(new QTreeWidgetItem({"grandSon"}));

    ui->treeWidget->topLevelItem(1)->addChild(new QTreeWidgetItem({"2 - child1"})); 
    ui->treeWidget->topLevelItem(1)->addChild(new QTreeWidgetItem({"2 - child2"}));

    //插入图标
    ui->treeWidget->setIconSize(QSize(60,60));
    ui->treeWidget->topLevelItem(0)->setIcon(0,QIcon("test.jpg"));

    //插入Widget
    QPushButton * but = new QPushButton("Test");
    ui->treeWidget->setItemWidget(ui->treeWidget->topLevelItem(1),0,but);

//    ui->treeWidget->
}

void Widget::Click(QTreeWidgetItem *item)
{
    qDebug()<<"Click "<<item->text(0);
}

void Widget::Double(QTreeWidgetItem *item)
{
    qDebug()<<"Double "<<item->text(0);
}

void Widget::Hover(QTreeWidgetItem *item)
{
    qDebug()<<"Hover "<<item->text(0);
    //ui->treeWidget->expandItem(item);
}

void Widget::Expand(QTreeWidgetItem *item)
{
    qDebug()<<"Expand "<<item->text(0);
    //清空历史数据
    while(item->child(0)>0)
    {
        item->removeChild(item->child(0));
    }
    item->addChild(new QTreeWidgetItem({"new tree1"}));
    item->addChild(new QTreeWidgetItem({"new tree2"}));
    item->addChild(new QTreeWidgetItem({"new tree3"}));
}

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

ui_widget.h


#ifndef UI_WIDGET_H
#define UI_WIDGET_H

#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QTreeWidget>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_Widget
{
public:
    QTreeWidget *treeWidget;

    void setupUi(QWidget *Widget)
    {
        if (Widget->objectName().isEmpty())
            Widget->setObjectName(QString::fromUtf8("Widget"));
        Widget->resize(800, 600);
        treeWidget = new QTreeWidget(Widget);
        new QTreeWidgetItem(treeWidget);
        new QTreeWidgetItem(treeWidget);
        QTreeWidgetItem *__qtreewidgetitem = new QTreeWidgetItem(treeWidget);
        QTreeWidgetItem *__qtreewidgetitem1 = new QTreeWidgetItem(__qtreewidgetitem);
        QTreeWidgetItem *__qtreewidgetitem2 = new QTreeWidgetItem(__qtreewidgetitem1);
        QTreeWidgetItem *__qtreewidgetitem3 = new QTreeWidgetItem(__qtreewidgetitem2);
        QTreeWidgetItem *__qtreewidgetitem4 = new QTreeWidgetItem(__qtreewidgetitem3);
        QTreeWidgetItem *__qtreewidgetitem5 = new QTreeWidgetItem(__qtreewidgetitem4);
        new QTreeWidgetItem(__qtreewidgetitem5);
        new QTreeWidgetItem(treeWidget);
        new QTreeWidgetItem(treeWidget);
        QTreeWidgetItem *__qtreewidgetitem6 = new QTreeWidgetItem(treeWidget);
        QTreeWidgetItem *__qtreewidgetitem7 = new QTreeWidgetItem(__qtreewidgetitem6);
        new QTreeWidgetItem(__qtreewidgetitem7);
        treeWidget->setObjectName(QString::fromUtf8("treeWidget"));
        treeWidget->setGeometry(QRect(40, 40, 461, 421));
        treeWidget->setStyleSheet(QString::fromUtf8("QTreeWidget{\n"
"   alternate-background-color: rgb(255, 255, 164);\n"
"   background-color:#FFEDE7;\n"
"}\n"
"\n"
"QTreeWidget::item:hover{\n"
"   color: rgb(78, 154, 6);\n"
"}\n"
"\n"
"QTreeWidget::item:selected{\n"
"   background-color:#DEDDEA;\n"
"}\n"
"\n"
"QTreeWidget::branch{\n"
"   \n"
"   /*background-color: rgb(92, 53, 102);*/\n"
"}\n"
"\n"
"QHeaderView::selection{\n"
"   background-color: rgb(46, 52, 54);\n"
"   border:1px solid    #c5daff;\n"
"}\n"
"\n"
"QTreeView::branch:has-sibings:!adjoins-item{\n"
"    border-image:url(vline.png) 0;\n"
"}\n"
"\n"
"QTreeView::branch:has-sibings:adjoins-item{\n"
"    border-image:url(branch-more.png) 0;\n"
"}\n"
"\n"
"QTreeView::branch:!has-children:!has-siblings:adjoins-item{\n"
"    border-image:url(branch-end.png) 0;\n"
"}\n"
"\n"
"QTreeView::branch:has-children:!has-siblings:closed,\n"
"QTreeView::branch:closed:has-children:has-siblings{\n"
"    border-image:none;image:url(branch-closed.png);\n"
"}\n"
"\n"
"QTreeView::branch:open:has-children:!has-siblings,\n"
"QTreeView::bran"
                        "ch:open:has-children:has-siblings{\n"
"    border-image:none;\n"
"    image:url(branch-open.png);\n"
"}\n"
""));
        treeWidget->setTabKeyNavigation(false);
        treeWidget->setDragEnabled(false);
        treeWidget->setAnimated(true);
        treeWidget->setAllColumnsShowFocus(false);
        treeWidget->setWordWrap(false);
        treeWidget->header()->setCascadingSectionResizes(false);
        treeWidget->header()->setHighlightSections(false);
        treeWidget->header()->setProperty("showSortIndicator", QVariant(true));

        retranslateUi(Widget);
        QObject::connect(treeWidget, SIGNAL(itemClicked(QTreeWidgetItem*,int)), Widget, SLOT(Click(QTreeWidgetItem*)));
        QObject::connect(treeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), Widget, SLOT(Double(QTreeWidgetItem*)));
        QObject::connect(treeWidget, SIGNAL(itemEntered(QTreeWidgetItem*,int)), Widget, SLOT(Hover(QTreeWidgetItem*)));
        QObject::connect(treeWidget, SIGNAL(itemExpanded(QTreeWidgetItem*)), Widget, SLOT(Expand(QTreeWidgetItem*)));

        QMetaObject::connectSlotsByName(Widget);
    } // setupUi

    void retranslateUi(QWidget *Widget)
    {
        Widget->setWindowTitle(QCoreApplication::translate("Widget", "Widget", nullptr));
        QTreeWidgetItem *___qtreewidgetitem = treeWidget->headerItem();
        ___qtreewidgetitem->setText(9, QCoreApplication::translate("Widget", "\346\226\260\345\273\272\345\210\227", nullptr));
        ___qtreewidgetitem->setText(8, QCoreApplication::translate("Widget", "\346\226\260\345\273\272\345\210\227", nullptr));
        ___qtreewidgetitem->setText(7, QCoreApplication::translate("Widget", "\346\226\260\345\273\272\345\210\227", nullptr));
        ___qtreewidgetitem->setText(6, QCoreApplication::translate("Widget", "\346\226\260\345\273\272\345\210\227", nullptr));
        ___qtreewidgetitem->setText(5, QCoreApplication::translate("Widget", "\346\226\260\345\273\272\345\210\227", nullptr));
        ___qtreewidgetitem->setText(4, QCoreApplication::translate("Widget", "\346\226\260\345\273\272\345\210\227", nullptr));
        ___qtreewidgetitem->setText(3, QCoreApplication::translate("Widget", "\346\226\260\345\273\272\345\210\227", nullptr));
        ___qtreewidgetitem->setText(2, QCoreApplication::translate("Widget", "3", nullptr));
        ___qtreewidgetitem->setText(1, QCoreApplication::translate("Widget", "2", nullptr));
        ___qtreewidgetitem->setText(0, QCoreApplication::translate("Widget", "1", nullptr));

        const bool __sortingEnabled = treeWidget->isSortingEnabled();
        treeWidget->setSortingEnabled(false);
        QTreeWidgetItem *___qtreewidgetitem1 = treeWidget->topLevelItem(0);
        ___qtreewidgetitem1->setText(2, QCoreApplication::translate("Widget", "13", nullptr));
        ___qtreewidgetitem1->setText(1, QCoreApplication::translate("Widget", "12", nullptr));
        ___qtreewidgetitem1->setText(0, QCoreApplication::translate("Widget", "11", nullptr));
        QTreeWidgetItem *___qtreewidgetitem2 = treeWidget->topLevelItem(1);
        ___qtreewidgetitem2->setText(0, QCoreApplication::translate("Widget", "\346\226\260\345\273\272\351\241\271\347\233\256", nullptr));
        QTreeWidgetItem *___qtreewidgetitem3 = treeWidget->topLevelItem(2);
        ___qtreewidgetitem3->setText(0, QCoreApplication::translate("Widget", "\346\226\260\345\273\272\351\241\271\347\233\256", nullptr));
        QTreeWidgetItem *___qtreewidgetitem4 = ___qtreewidgetitem3->child(0);
        ___qtreewidgetitem4->setText(0, QCoreApplication::translate("Widget", "\346\226\260\345\273\272\345\255\220\351\241\271\347\233\256", nullptr));
        QTreeWidgetItem *___qtreewidgetitem5 = ___qtreewidgetitem4->child(0);
        ___qtreewidgetitem5->setText(0, QCoreApplication::translate("Widget", "\346\226\260\345\273\272\345\255\220\351\241\271\347\233\256", nullptr));
        QTreeWidgetItem *___qtreewidgetitem6 = ___qtreewidgetitem5->child(0);
        ___qtreewidgetitem6->setText(0, QCoreApplication::translate("Widget", "\346\226\260\345\273\272\345\255\220\351\241\271\347\233\256", nullptr));
        QTreeWidgetItem *___qtreewidgetitem7 = ___qtreewidgetitem6->child(0);
        ___qtreewidgetitem7->setText(0, QCoreApplication::translate("Widget", "\346\226\260\345\273\272\345\255\220\351\241\271\347\233\256", nullptr));
        QTreeWidgetItem *___qtreewidgetitem8 = ___qtreewidgetitem7->child(0);
        ___qtreewidgetitem8->setText(0, QCoreApplication::translate("Widget", "\346\226\260\345\273\272\345\255\220\351\241\271\347\233\256", nullptr));
        QTreeWidgetItem *___qtreewidgetitem9 = ___qtreewidgetitem8->child(0);
        ___qtreewidgetitem9->setText(0, QCoreApplication::translate("Widget", "\346\226\260\345\273\272\345\255\220\351\241\271\347\233\256", nullptr));
        QTreeWidgetItem *___qtreewidgetitem10 = treeWidget->topLevelItem(3);
        ___qtreewidgetitem10->setText(0, QCoreApplication::translate("Widget", "\346\226\260\345\273\272\351\241\271\347\233\256", nullptr));
        QTreeWidgetItem *___qtreewidgetitem11 = treeWidget->topLevelItem(4);
        ___qtreewidgetitem11->setText(0, QCoreApplication::translate("Widget", "\346\226\260\345\273\272\351\241\271\347\233\256", nullptr));
        QTreeWidgetItem *___qtreewidgetitem12 = treeWidget->topLevelItem(5);
        ___qtreewidgetitem12->setText(2, QCoreApplication::translate("Widget", "23", nullptr));
        ___qtreewidgetitem12->setText(1, QCoreApplication::translate("Widget", "22", nullptr));
        ___qtreewidgetitem12->setText(0, QCoreApplication::translate("Widget", "21", nullptr));
        QTreeWidgetItem *___qtreewidgetitem13 = ___qtreewidgetitem12->child(0);
        ___qtreewidgetitem13->setText(2, QCoreApplication::translate("Widget", "32", nullptr));
        ___qtreewidgetitem13->setText(1, QCoreApplication::translate("Widget", "31", nullptr));
        ___qtreewidgetitem13->setText(0, QCoreApplication::translate("Widget", "\346\226\260\345\273\272\345\255\220\351\241\271\347\233\256", nullptr));
        QTreeWidgetItem *___qtreewidgetitem14 = ___qtreewidgetitem13->child(0);
        ___qtreewidgetitem14->setText(2, QCoreApplication::translate("Widget", "42", nullptr));
        ___qtreewidgetitem14->setText(1, QCoreApplication::translate("Widget", "41", nullptr));
        ___qtreewidgetitem14->setText(0, QCoreApplication::translate("Widget", "\346\226\260\345\273\272\345\255\220\351\241\271\347\233\256", nullptr));
        treeWidget->setSortingEnabled(__sortingEnabled);

    } // retranslateUi

};

namespace Ui {
    class Widget: public Ui_Widget {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_WIDGET_H

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值