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

效果如下:

相关推荐
小bo波1 小时前
从"任意文件复制"深挖Java I/O:字符流与字节流的本质抉择
java·nio·io流·后端开发·文件复制
xcyxiner10 小时前
DicomViewer (dcmtk读取dcm文件)5
qt
nanxun8861 天前
记一次诡异的 Docker 容器"串包"故障排查
java
xcyxiner1 天前
DicomViewer (后台线程处理文件)4
qt
用户1563068103511 天前
Day01 | Java 基础(Java SE)
java
行者全栈架构师1 天前
Maven dependency:tree 的 8 个高级用法
java·后端
xcyxiner1 天前
DicomViewer (添加模型类)3
qt
行者全栈架构师1 天前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
令人头秃的代码0_01 天前
mac(m5)平台编译openjdk
java
xcyxiner2 天前
DicomViewer (目录调整) 2
qt