Qt手写ListView

创建视图:

cpp 复制代码
QHBoxLayout* pHLay = new QHBoxLayout(this);
	m_pLeftTree = new QTreeView(this);
	m_pLeftTree->setEditTriggers(QAbstractItemView::NoEditTriggers);  //设置不可编辑
	m_pLeftTree->setFixedWidth(300);

创建模型和模型项:

cpp 复制代码
m_pLeftTree->setFrameShape(QFrame::NoFrame);

	QStandardItemModel* model = new QStandardItemModel(m_pLeftTree);
	model->setHorizontalHeaderLabels(QStringList() << "draw all");

	QStandardItem* pParentItem = NULL;
	QStandardItem* pChildItem = NULL;

// 点
	pParentItem = new QStandardItem(QIcon(":/resources/point.png"), "draw ponit");
	model->appendRow(pParentItem);//将父项加入Model

	pChildItem = new QStandardItem(QIcon(":/resources/point.png"), "point");
	pParentItem->appendRow(pChildItem);//将子项加入父节点

	pChildItem = new QStandardItem(QIcon(":/resources/multipoints.png"), "multipoints");
	pParentItem->appendRow(pChildItem);

	// 线
	pParentItem = new QStandardItem(QIcon(":/resources/line.png"), "draw line");
	model->appendRow(pParentItem);

	pChildItem = new QStandardItem(QIcon(":/resources/line.png"), "line");
	pParentItem->appendRow(pChildItem);

	pChildItem = new QStandardItem(QIcon(":/resources/arc.png"), "arc");
	pParentItem->appendRow(pChildItem);

	// 封闭的图形
	pParentItem = new QStandardItem(QIcon(":/resources/rect.png"), "draw rect");
	model->appendRow(pParentItem);

	pChildItem = new QStandardItem(QIcon(":/resources/rect.png"), "rect");
	pParentItem->appendRow(pChildItem);

	pChildItem = new QStandardItem(QIcon(":/resources/roundrect.png"), "roundrect");
	pParentItem->appendRow(pChildItem);

	pChildItem = new QStandardItem(QIcon(":/resources/chord.png"), "chord");
	pParentItem->appendRow(pChildItem);

	pChildItem = new QStandardItem(QIcon(":/resources/ellipse.png"), "ellipse");
	pParentItem->appendRow(pChildItem);

	// 任意路径绘制
	pParentItem = new QStandardItem(QIcon(":/resources/polygon.png"), "draw polygon");
	model->appendRow(pParentItem);

	pChildItem = new QStandardItem(QIcon(":/resources/polygon.png"), "polygon");
	pParentItem->appendRow(pChildItem);

	pChildItem = new QStandardItem(QIcon(":/resources/polyline.png"), "polyline");
	pParentItem->appendRow(pChildItem);

	pChildItem = new QStandardItem(QIcon(":/resources/ConvexPloygon.png"), "ConvexPloygon");
	pParentItem->appendRow(pChildItem);

	pChildItem = new QStandardItem(QIcon(":/resources/lines.png"), "lines");
	pParentItem->appendRow(pChildItem);

	pChildItem = new QStandardItem(QIcon(":/resources/path.png"), "path");
	pParentItem->appendRow(pChildItem);

	pChildItem = new QStandardItem(QIcon(":/resources/pie.png"), "pie");
	pParentItem->appendRow(pChildItem);

	// 图片绘制
	pParentItem = new QStandardItem(QIcon(":/resources/image.png"), "draw image");
	model->appendRow(pParentItem);

	pChildItem = new QStandardItem(QIcon(":/resources/image.png"), "image");
	pParentItem->appendRow(pChildItem);

	pChildItem = new QStandardItem(QIcon(":/resources/pixmap.png"), "pixmap");
	pParentItem->appendRow(pChildItem);

	// 文本绘制
	pParentItem = new QStandardItem(QIcon(":/resources/text.png"), "draw text");
	model->appendRow(pParentItem);

	// 擦除
	pParentItem = new QStandardItem(QIcon(":/resources/erase.png"), "draw erase");
	model->appendRow(pParentItem);

	// 路径填充
	pParentItem = new QStandardItem(QIcon(":/resources/fillpath.png"), "draw fillpath");
	model->appendRow(pParentItem);

	// 矩形填充
	pParentItem = new QStandardItem(QIcon(":/resources/fillrect.png"), "draw fillrect");
	model->appendRow(pParentItem);

效果如下:

相关推荐
無限進步D5 小时前
Java 面向对象高级 接口
java·开发语言
qq_413502025 小时前
如何创建CDB公共用户_C##前缀强制规则与CONTAINER=ALL
jvm·数据库·python
逸Y 仙X6 小时前
文章二十七:ElasticSearch ES查询模板(Search Template)高效复用实战
java·大数据·数据库·elasticsearch·搜索引擎·全文检索
m0_738120726 小时前
应急响应(重点)——记一次某公司流量应急溯源分析(附带下载链接)
服务器·前端·数据库·安全·web安全·网络安全
yexuhgu6 小时前
CSS如何利用-checked实现纯CSS手风琴折叠_通过状态选择器控制区域高度
jvm·数据库·python
二哈赛车手6 小时前
新人笔记---Spring AI的Advisor以及其底层机制讲解(涉及源码),包含一些遇见的Spring AI的Advisor缺陷问题的解决方案
java·人工智能·spring boot·笔记·spring
AC赳赳老秦6 小时前
接口测试自动化:用 OpenClaw 对接 Postman,实现批量回归测试、测试报告自动生成与推送
java·人工智能·python·算法·elasticsearch·deepseek·openclaw
两年半的个人练习生^_^6 小时前
Java日志框架和使用、日志记录规范
java·开发语言·开发规范
2301_779622416 小时前
mysql如何通过主从备份实现读写分离_配置mysql架构模式
jvm·数据库·python