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);

效果如下:

相关推荐
顾子茵10 分钟前
c++从入门到精通(四)--动态内存,模板与泛型编程
java·开发语言·c++
清酒伴风(面试准备中......)14 分钟前
小白学编程之——数据库如何性能优化
数据库·oracle·性能优化
码农飞哥24 分钟前
互联网大厂Java求职面试实战:Spring Boot到微服务全景解析
java·spring boot·微服务·maven·hibernate·技术栈·面试技巧
电信2301杨臣27 分钟前
QT---信号与槽
开发语言·qt
The Future is mine41 分钟前
SQL Server中delete table和truncate table删除全表数据哪个快?
数据库
IT成长史42 分钟前
deepseek梳理java高级开发工程师springboot面试题2
java·spring boot·后端
瀚高PG实验室1 小时前
HGDB插入超长字段报错指示列名的问题处理
数据库
hello1114-1 小时前
Redis学习打卡-Day2-缓存更新策略、主动更新策略、缓存穿透、缓存雪崩、缓存击穿
java·redis·学习·缓存·javaweb
好吃的肘子1 小时前
MongoDB 高可用复制集架构
数据库·mongodb·架构
qq_266348731 小时前
springboot AOP中,通过解析SpEL 表达式动态获取参数值
java·spring boot·后端