2021-09-05

Qt 对QTreeView的遍历及搜索

#pragma once

#include <QtWidgets/QWidget>
#include "ui_TestQtreeView.h"
#include <QStandardItemModel>

class TestQtreeView : public QWidget
{
    Q_OBJECT

public:
    TestQtreeView(QWidget *parent = Q_NULLPTR);
public slots:
	void OnSearchBtnClicked();
	void GetItem(QStandardItem*);
	void GetParent(QStandardItem*);
	void CreateSearchedTree(QStandardItem*, QStandardItem*, QString);

private:
    Ui::TestQtreeViewClass ui;
	QStandardItemModel *m_pModel;
	QStandardItemModel *m_pSearchModel;
};

#include "TestQtreeView.h"
#include <QStandardItemModel>
#include <QBrush>

TestQtreeView::TestQtreeView(QWidget *parent)
    : QWidget(parent)
	, m_pModel(NULL)
	, m_pSearchModel(NULL)
{
    ui.setupUi(this);
	connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(OnSearchBtnClicked()));
	QStandardItemModel *model = new QStandardItemModel();
	m_pSearchModel = new QStandardItemModel(ui.treeView_2);
	m_pModel = model;
	ui.stackedWidget->setCurrentIndex(0);
	model->setHorizontalHeaderLabels(QStringList() << QStringLiteral("省市县"));
	// 省
	QStandardItem *provinceItem_1 = new QStandardItem(QStringLiteral("山东省"));
	QStandardItem *provinceItem_2 = new QStandardItem(QStringLiteral("江苏省"));
	// 市
	QStandardItem *cityItem_1_1 = new QStandardItem(QStringLiteral("济南市"));
	QStandardItem *cityItem_1_2 = new QStandardItem(QStringLiteral("青岛市"));
	QStandardItem *cityItem_1_3 = new QStandardItem(QStringLiteral("徐州市test1"));
	//QStandardItem *cityItem_1_3 = new QStandardItem(QStringLiteral("淄博市"));
	QStandardItem *cityItem_2_1 = new QStandardItem(QStringLiteral("南京市"));
	QStandardItem *cityItem_2_2 = new QStandardItem(QStringLiteral("无锡市"));
	QStandardItem *cityItem_2_3 = new QStandardItem(QStringLiteral("徐州市"));
	QStandardItem *cityItem_2_4 = new QStandardItem(QStringLiteral("徐州市1"));
	// 县
	QStandardItem *countyItem_1_3_1 = new QStandardItem(QStringLiteral("即墨市"));
	QStandardItem *countyItem_1_3_2 = new QStandardItem(QStringLiteral("城阳区"));

	// [1] 创建一级节点:model 下创建省节点
	model->appendRow(provinceItem_1);
	int n = provinceItem_1->rowCount();
	model->appendRow(provinceItem_2);

	// [2] 创建二级节点:provinceItem 下创建市节点
	provinceItem_1->appendRow(cityItem_1_1);
	provinceItem_1->appendRow(cityItem_1_2);
	provinceItem_1->appendRow(cityItem_1_3);
	n = provinceItem_1->rowCount();

	provinceItem_2->appendRow(cityItem_2_1);
	provinceItem_2->appendRow(cityItem_2_2);
	provinceItem_2->appendRow(cityItem_2_3);
	//provinceItem_2->appendRow(cityItem_2_4);

	// [3] 创建三级节点:cityItem 下县节点
	cityItem_1_3->appendRow(countyItem_1_3_1);
	cityItem_1_3->appendRow(countyItem_1_3_2);

	ui.treeView->setModel(model);
	ui.treeView->resize(500, 500);
	ui.treeView->show();
	ui.treeView->expandAll();
	int N = model->rowCount();
	ui.treeView->setHeaderHidden(true);
}

void TestQtreeView::OnSearchBtnClicked()
{
	QString strText = ui.lineEdit->text();
	int iCnt = ui.treeView->model()->rowCount();
	for (int i = 0; i < iCnt; ++i)
	{
		QStandardItem* pItem = m_pModel->item(i);
		QString strTmp = pItem->text();

		GetItem(pItem);
	}
}

void TestQtreeView::GetItem(QStandardItem* pItem)
{
	if (pItem == NULL)
	{
		return;
	}
	if (pItem->hasChildren())
	{
		int iCnt = pItem->rowCount();
		for (int i = 0; i < iCnt; ++i)
		{
			QStandardItem *pChildItem = pItem->child(i);
			QString strTmp = pChildItem->text();

			//匹配到了
			if (strTmp.contains(ui.lineEdit->text()))
			{
				pChildItem->setBackground(QBrush(QColor("#DDA0DD")));
				QStandardItem* pParentItem = new QStandardItem(pChildItem->parent()->text());
				//QStandardItem* pParentItem = pChildItem->parent();
				QString strItemText = pParentItem->text();
				//pParentItem->setData(strItemText)
				GetParent(pParentItem);
				CreateSearchedTree(pParentItem, pChildItem, strItemText);
			}
			GetItem(pChildItem);
		}
	}
	ui.stackedWidget->setCurrentIndex(1);
}

void TestQtreeView::GetParent(QStandardItem* pParentItem)
{
	if (pParentItem == NULL)
	{
		return;
	}

	//递归获取父节点
	GetParent(pParentItem->parent());
	//目标节点的父节点的父节点若为空,则代表为根节点
	QStandardItem* pParent = pParentItem->parent();
	if (pParent == NULL)
	{
		QString str = pParentItem->text();
		QStandardItem* pRoot = pParentItem;
		m_pSearchModel->appendRow(pRoot);
		QString strEx = pRoot->text();
		ui.treeView_2->setModel(m_pSearchModel);
		ui.treeView_2->resize(500, 500);
		ui.treeView_2->show();
		ui.treeView_2->expandAll();
		int N = m_pSearchModel->rowCount();
		ui.treeView_2->setHeaderHidden(true);
	}
}

void TestQtreeView::CreateSearchedTree(QStandardItem* pParentItem, QStandardItem* pChildItem, QString strItemText)
{
	if (pParentItem && pChildItem)
	{
		QStandardItem* pChild = new QStandardItem(pChildItem->text());
		pParentItem->appendRow(pChild);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用python中的pymsql完成如下:表结构与数据创建 1. 建立 `users` 表和 `orders` 表。 `users` 表有用户ID、用户名、年龄字段,(id,name,age) `orders` 表有订单ID、订单日期、订单金额,用户id字段。(id,order_date,amount,user_id) 2 两表的id作为主键,`orders` 表用户id为users的外键 3 插入数据 `users` (1, '张三', 18), (2, '李四', 20), (3, '王五', 22), (4, '赵六', 25), (5, '钱七', 28); `orders` (1, '2021-09-01', 500, 1), (2, '2021-09-02', 1000, 2), (3, '2021-09-03', 600, 3), (4, '2021-09-04', 800, 4), (5, '2021-09-05', 1500, 5), (6, '2021-09-06', 1200, 3), (7, '2021-09-07', 2000, 1), (8, '2021-09-08', 300, 2), (9, '2021-09-09', 700, 5), (10, '2021-09-10', 900, 4); 查询语句 1. 查询订单总金额 2. 查询所有用户的平均年龄,并将结果四舍五入保留两位小数。 3. 查询订单总数最多的用户的姓名和订单总数。 4. 查询所有不重复的年龄。 5. 查询订单日期在2021年9月1日至9月4日之间的订单总金额。 6. 查询年龄不大于25岁的用户的订单数量,并按照降序排序。 7. 查询订单总金额排名前3的用户的姓名和订单总金额。 8. 查询订单总金额最大的用户的姓名和订单总金额。 9. 查询订单总金额最小的用户的姓名和订单总金额。 10. 查询所有名字中含有“李”的用户,按照名字升序排序。 11. 查询所有年龄大于20岁的用户,按照年龄降序排序,并只显示前5条记录。 12. 查询每个用户的订单数量和订单总金额,并按照总金额降序排序。
06-03

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值