9.3、QT::QTreeWidgetTest操作

前言:

本文操作均为在vs2015+QT5.9.5版本中执行

头文件:qtablewidgettest.h

#pragma once

#include <QtWidgets/QWidget>
#include "ui_qtreewidgettest.h"

class QTreeWidgetTest : public QWidget
{
	Q_OBJECT

public:
	QTreeWidgetTest(QWidget *parent = Q_NULLPTR);
public slots:
    //鼠标点击
    void ItemClicked(QTreeWidgetItem*item);
	//鼠标双击
	void ItemDoubleClicked(QTreeWidgetItem*item);
	//鼠标移动事件
	void ItemEntered(QTreeWidgetItem*item);
	//鼠标修改事件
	void ItemExpanded(QTreeWidgetItem*item);
private:
	Ui::QTreeWidgetTestClass ui;
};

UI文件:ui_qtablewidgettest.h

/********************************************************************************
** Form generated from reading UI file 'qtreewidgettest.ui'
**
** Created by: Qt User Interface Compiler version 5.9.5
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_QTREEWIDGETTEST_H
#define UI_QTREEWIDGETTEST_H

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

QT_BEGIN_NAMESPACE

class Ui_QTreeWidgetTestClass
{
public:
    QTreeWidget *treeWidget;

    void setupUi(QWidget *QTreeWidgetTestClass)
    {
        if (QTreeWidgetTestClass->objectName().isEmpty())
            QTreeWidgetTestClass->setObjectName(QStringLiteral("QTreeWidgetTestClass"));
        QTreeWidgetTestClass->resize(1064, 720);
        treeWidget = new QTreeWidget(QTreeWidgetTestClass);
        QTreeWidgetItem *__qtreewidgetitem = new QTreeWidgetItem(treeWidget);
        QTreeWidgetItem *__qtreewidgetitem1 = new QTreeWidgetItem(__qtreewidgetitem);
        new QTreeWidgetItem(__qtreewidgetitem1);
        new QTreeWidgetItem(treeWidget);
        treeWidget->setObjectName(QStringLiteral("treeWidget"));
        treeWidget->setGeometry(QRect(90, 90, 781, 501));
        treeWidget->setStyleSheet(QString::fromUtf8("QTreeWidget{\n"
"     \n"
"	background-color:rgb(244, 249, 250);\n"
"	alternate-background-color: rgb(170, 255, 255);\n"
"}\n"
"/*Item\347\247\273\345\212\250\344\270\212\345\216\273\345\220\216\346\225\210\346\236\234*/\n"
"QTreeWidget::Item:hover{\n"
"    background-color:#C5DAFF;\n"
"}\n"
"/*Item\351\200\211\344\270\255\345\220\216\346\225\210\346\236\234*/\n"
"QTreeWidget::Item:selected{\n"
"    background-color:#DEBBE8;\n"
"}\n"
"/*\345\210\206\346\224\257\351\242\234\350\211\262\350\256\276\347\275\256*/\n"
"QTreeWidget::branch{\n"
"   /* background-color: rgb(170, 255, 255);*/\n"
"}\n"
"/*\346\224\271\345\217\230\346\240\207\351\242\230\351\242\234\350\211\262*/\n"
"QHeaderView::section{\n"
"    background-color: rgbs(57, 191, 194,200);\n"
"    border: 1px solid rgb(244, 249, 250)\n"
"}"));
        treeWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
        treeWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
        treeWidget->setAlternatingRowColors(true);
        treeWidget->setSortingEnabled(false);
        treeWidget->setAnimated(false);
        treeWidget->header()->setDefaultSectionSize(100);

        retranslateUi(QTreeWidgetTestClass);

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

    void retranslateUi(QWidget *QTreeWidgetTestClass)
    {
        QTreeWidgetTestClass->setWindowTitle(QApplication::translate("QTreeWidgetTestClass", "QTreeWidgetTest", Q_NULLPTR));
        QTreeWidgetItem *___qtreewidgetitem = treeWidget->headerItem();
        ___qtreewidgetitem->setText(2, QApplication::translate("QTreeWidgetTestClass", "\346\226\260\345\273\272\345\210\2273", Q_NULLPTR));
        ___qtreewidgetitem->setText(1, QApplication::translate("QTreeWidgetTestClass", "\346\226\260\345\273\272\345\210\2272", Q_NULLPTR));
        ___qtreewidgetitem->setText(0, QApplication::translate("QTreeWidgetTestClass", "\346\226\260\345\273\272\345\210\2271", Q_NULLPTR));

        const bool __sortingEnabled = treeWidget->isSortingEnabled();
        treeWidget->setSortingEnabled(false);
        QTreeWidgetItem *___qtreewidgetitem1 = treeWidget->topLevelItem(0);
        ___qtreewidgetitem1->setText(2, QApplication::translate("QTreeWidgetTestClass", "23", Q_NULLPTR));
        ___qtreewidgetitem1->setText(1, QApplication::translate("QTreeWidgetTestClass", "22", Q_NULLPTR));
        ___qtreewidgetitem1->setText(0, QApplication::translate("QTreeWidgetTestClass", "21", Q_NULLPTR));
        QTreeWidgetItem *___qtreewidgetitem2 = ___qtreewidgetitem1->child(0);
        ___qtreewidgetitem2->setText(2, QApplication::translate("QTreeWidgetTestClass", "21.2", Q_NULLPTR));
        ___qtreewidgetitem2->setText(1, QApplication::translate("QTreeWidgetTestClass", "21.1", Q_NULLPTR));
        ___qtreewidgetitem2->setText(0, QApplication::translate("QTreeWidgetTestClass", "\346\226\260\345\273\272\345\255\220\351\241\271\347\233\2561", Q_NULLPTR));
        QTreeWidgetItem *___qtreewidgetitem3 = ___qtreewidgetitem2->child(0);
        ___qtreewidgetitem3->setText(2, QApplication::translate("QTreeWidgetTestClass", "22.2", Q_NULLPTR));
        ___qtreewidgetitem3->setText(1, QApplication::translate("QTreeWidgetTestClass", "22.1", Q_NULLPTR));
        ___qtreewidgetitem3->setText(0, QApplication::translate("QTreeWidgetTestClass", "\346\226\260\345\273\272\345\255\220\351\241\271\347\233\2562", Q_NULLPTR));
        QTreeWidgetItem *___qtreewidgetitem4 = treeWidget->topLevelItem(1);
        ___qtreewidgetitem4->setText(2, QApplication::translate("QTreeWidgetTestClass", "13", Q_NULLPTR));
        ___qtreewidgetitem4->setText(1, QApplication::translate("QTreeWidgetTestClass", "12", Q_NULLPTR));
        ___qtreewidgetitem4->setText(0, QApplication::translate("QTreeWidgetTestClass", "11", Q_NULLPTR));
        treeWidget->setSortingEnabled(__sortingEnabled);

    } // retranslateUi

};

namespace Ui {
    class QTreeWidgetTestClass: public Ui_QTreeWidgetTestClass {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_QTREEWIDGETTEST_H

主函数:main.cpp

#include "qtreewidgettest.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	QTreeWidgetTest w;
	w.show();
	return a.exec();
}

实现文件:qtablewidgettest.cpp

#include "qtreewidgettest.h"
#include <QDebug>
#include <QPushButton>
/*
  单词汇总:
      Top Level Item(顶部 水平 节点)
      clear data(清理 数据)
      header Item(头部 标题)
	  set Animated(设置 动画)
	  add Child(添加 子节点)
*/
QTreeWidgetTest::QTreeWidgetTest(QWidget *parent)
	: QWidget(parent)
{

	ui.setupUi(this);
	//TreeWidget控件属性设置
		/***********************************************************************************/
		//排序
	ui.treeWidget->setSortingEnabled(true);
	//开启折叠动画
	ui.treeWidget->setAnimated(true);
	//设置标题宽度大小
	ui.treeWidget->header()->setDefaultSectionSize(200);
	//设置垂直滚动条一直显示
	ui.treeWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
	//设置水平滚动条关闭
	ui.treeWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
	//打开鼠标追踪
	ui.treeWidget->setMouseTracking(true);
	//打开交替行颜色
	ui.treeWidget->setAlternatingRowColors(true);
	/***********************************************************************************/

 //清理标题以及数据
	 //清理标题方法:
		 //不可行方案:                       
		 //ui.treeWidget->setColumnCount(0);//这样清理并不会清空标题以及数据,只会造成隐藏标题以及数据。
	 //可执行方案:
	ui.treeWidget->setHeaderItem(new QTreeWidgetItem());//此方法是重新创建标题,会替换掉之前的标题内容
	ui.treeWidget->clear();//清理数据(clear data);

//“添加标题”及其“插入数据”方法:

	//添加标题方法:
	//PS:setColumnCount(0)用这个方法去添加标题,不会影响接下来的添加标题方法;
	ui.treeWidget->setColumnCount(3);//测试是否影响下列添加数据

	ui.treeWidget->headerItem()->setText(0, QString::fromLocal8Bit("标题1"));
	//中间空出来位置会自动填充一个标题;
	ui.treeWidget->headerItem()->setText(1, QString::fromLocal8Bit("标题2"));
	ui.treeWidget->headerItem()->setText(2, QString::fromLocal8Bit("标题3"));
	ui.treeWidget->headerItem()->setText(3, QString::fromLocal8Bit("标题4"));
	//ui.treeWidget->headerItem()->setText(4, QString::fromLocal8Bit("标题5"));

	qDebug() << "setColumnCount:" << ui.treeWidget->columnCount();//测试结果:不会影响headerItem()添加方法

	//插入数据
	ui.treeWidget->addTopLevelItem(new QTreeWidgetItem());	//设置一个顶部节点;PS: 代码中Top是指顶部节点。
	//添加节点	
	/*
	topLevelItem(子节点下标)
	setText(标题下标 , "名称(name)")
	*/
	ui.treeWidget->topLevelItem(0)->setText(0, "tree node 1");
	ui.treeWidget->topLevelItem(0)->setText(1, "tree node 2");
	ui.treeWidget->topLevelItem(0)->setText(2, "tree node 3");
	ui.treeWidget->topLevelItem(0)->setText(3, "tree node 4");

	//插入到结尾处,利用数组初始化两个节点。
	//定义:void addTopLevelItem(QTreeWidgetItem *item);
	ui.treeWidget->addTopLevelItem(new QTreeWidgetItem({ "tree node 2-1 coll","tree node 2-2 col2" }));
	ui.treeWidget->topLevelItem(1)->setText(2, "tree node 2-3");//一定要先添加“addTopLevelItem”后才能添加节点

	//插入到第一行
	ui.treeWidget->insertTopLevelItem(0, new QTreeWidgetItem({ "insert tree node one","insert tree node tow" }));
	//插入到最后一行
	ui.treeWidget->insertTopLevelItem(ui.treeWidget->topLevelItemCount(), new QTreeWidgetItem());
	//topLevelItemCount()获取总数,从1开始,不是从0开始。
	ui.treeWidget->topLevelItem(ui.treeWidget->topLevelItemCount()-1)->setText(0, "end tree node 1");

	//创建一个新的一列QTreeWidgetItem节点,也是尾部添加,似乎没有函数可以修改插入位置
	QTreeWidgetItem *node = new QTreeWidgetItem(ui.treeWidget);
	node->setText(0,"new node 1");

	//插入孩子节点;
	//添加子节点(addChild)
    //PS:ui.treeWidget->topLevelItem(列)->addChild(new QTreeWidgetItem({ "名称"}));
	ui.treeWidget->topLevelItem(0)->addChild(new QTreeWidgetItem({ "Child_1" ,"Child_2","Child_3","Child_4" }));
	ui.treeWidget->topLevelItem(0)->addChild(new QTreeWidgetItem({ "Child_2"  }));
	ui.treeWidget->topLevelItem(0)->addChild(new QTreeWidgetItem({ "Child_3" }));
	//添加子节点到第二行
	ui.treeWidget->topLevelItem(1)->addChild(new QTreeWidgetItem({ "Child_1_1" ,"Child_1_2","Child_1_3","Child_1_4" }));
	ui.treeWidget->topLevelItem(1)->addChild(new QTreeWidgetItem({ "Child_1_2" }));
	ui.treeWidget->topLevelItem(1)->addChild(new QTreeWidgetItem({ "Child_1_3" }));

	//插入孙子节点:先找到第几列插入->找到第几行插入->插入孙子节点
	//PS:ui.treeWidget->topLevelItem(列)->child(行)->addChild(new QTreeWidgetItem({ "名称" }));
	ui.treeWidget->topLevelItem(0)->child(0)->addChild(new QTreeWidgetItem({ "grandson_1" }));

	//插入图片
	ui.treeWidget->setIconSize(QSize(60, 60));//设置图片大小
	ui.treeWidget->topLevelItem(0)->setText(0,"");//清空内容
	ui.treeWidget->topLevelItem(0)->setIcon(0, QIcon("five.png"));//插入图片

	//添加按钮
	QPushButton *but = new QPushButton("but1");//创建一个按钮
	//插入按钮:setItemWidget(位置, 行号,QWidget(控件) );
	ui.treeWidget->setItemWidget(ui.treeWidget->topLevelItem(1), 0,but );

	//PS:子节点除了第一列可以添加QPushButton,第二列只能添加Icon
	ui.treeWidget->topLevelItem(1)->child(0)->setIcon(1, QIcon("five.png"));

//信号与槽绑定
	//鼠标单击事件
	connect(ui.treeWidget, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(ItemClicked(QTreeWidgetItem*)));
	//鼠标双击事件
	connect(ui.treeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), this, SLOT(ItemDoubleClicked(QTreeWidgetItem*)));
	//鼠标悬浮到节点自动打开展开子节点事件
	connect(ui.treeWidget, SIGNAL(itemEntered(QTreeWidgetItem*,int)), this, SLOT(ItemEntered(QTreeWidgetItem*)));
	//鼠标单击项目展开子节点事件
	connect(ui.treeWidget, SIGNAL(itemExpanded(QTreeWidgetItem*)), this, SLOT(ItemExpanded(QTreeWidgetItem*)));

}

void QTreeWidgetTest::ItemClicked(QTreeWidgetItem*item)
{
	qDebug() << "Clicked" << item->text(0);
}

void QTreeWidgetTest::ItemDoubleClicked(QTreeWidgetItem*item)
{
	qDebug() << "DoubleClicked" << item->text(0);
}
//鼠标移动到节点自动展开子节点
void QTreeWidgetTest::ItemEntered(QTreeWidgetItem*item)
{
	qDebug() << "Hover" << item->text(0);
	//ui.treeWidget->expandItem(item);//打开子节点
}

void QTreeWidgetTest::ItemExpanded(QTreeWidgetItem*item)
{
	qDebug() << "Expanded" << item->text(0);
	//判断childCount()>0;节点总数大于0
	while(item->childCount()>0)
	{
		//清空节点
		item->removeChild(item->child(0));
	}
	//创建新的子节点
	item->addChild(new QTreeWidgetItem({ "one 1" }));
	item->addChild(new QTreeWidgetItem({ "one 2" }));
	item->addChild(new QTreeWidgetItem({ "one 3" }));
}

ui界面布局样式:

在这里插入图片描述

样式表:

treeWidget样式表:

QTreeWidget{
     
	background-color:rgb(244, 249, 250);
	alternate-background-color: rgb(170, 255, 255);
}
/*Item移动上去后效果*/
QTreeWidget::Item:hover{
    background-color:#C5DAFF;
}
/*Item选中后效果*/
QTreeWidget::Item:selected{
    background-color:#DEBBE8;
}
/*分支颜色设置*/
QTreeWidget::branch{
   /* background-color: rgb(170, 255, 255);*/
}
/*改变标题颜色*/
QHeaderView::section{
    background-color: rgbs(57, 191, 194,200);
    border: 1px solid rgb(244, 249, 250)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳一航

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值