Qt——简单树形控件样式设计(QTreeWidget)

QTreeWidget#treeWidget {
	background: #F9F9F9;
	border-right: 1px solid #D3D6DD;
	outline: none;
	font-size: 16px;
}
QTreeWidget::item {
	height: 40px;
	font-weight: 400;
	color: #4D4D4D;
	border: 0px;
	outline: 0px;
	font-size: 16px;
}
QTreeWidget::item:hover {
	border: 0px;
	outline: 0px;
    color: #45B2FF;
}
QTreeWidget::item:selected{
    border: 0px;
	outline: 0px;
    color: #45B2FF;
}
QTreeWidget::item:selected:active{
    border: 0px;
	outline: 0px;
    color: #45B2FF;
}

QTreeWidget::item:selected:!active {
    border: 0px;
	outline: 0px;
    color: #45B2FF;
}
QTreeWidget::branch {
	height: 28px;
	width: 28px;
}
QTreeWidget::branch:closed:has-children:!has-siblings,
QTreeWidget::branch:closed:has-children:has-siblings {
	border-image: none;
    image: url(:/images/tree_open.png);
}

QTreeWidget::branch:open:has-children:!has-siblings,
QTreeWidget::branch:open:has-children:has-siblings  {
	border-image: none;
    image: url(:/images/tree_close.png);
}


/* QTreeWidget::branch:!has-children:has-siblings:adjoins-item{ */
    /* border-image:none; */
    /* image:url(:/images/tree_close.png); */
    /* } */

/* QTreeWidget::branch:!has-children:!has-siblings:adjoins-item{ */
    /* border-image:none; */
    /* image:url(:/images/tree_close.png); */
    /* } */
QTreeWidget::indicator {
	height: 20px;
	width: 20px;
}
QTreeWidget::indicator:checked {
	image: url(:/images/select_item.png);
	color: #45B2FF;
}
QTreeWidget::indicator:unchecked {
	image: url(:/images/select_item_no.png);
	color: #45B2FF;
}

效果图如下:

 需要图中虚线连接方法1:

ui->treeWidget->setStyle(QStyleFactory::create("windows"));

方法2:

通过拼接线段图片设置样式制作(如有侵权请联系删除)

 如果需要添加复选框则代码设置:

pItem1_1_1->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);   //设置树形控件子项的属性                
pItem1_1_1->setCheckState(0, Qt::Unchecked); //初始状态没有被选中

### QTableWidget 和 QTreeWidget 的用法与区别 #### 基本概念 `QTableWidget` 是一种基于表格的控件,用于显示二维数据结构。它继承自 `QTableView` 并提供了一个内置模型来管理项目列表[^1]。 另一方面,`QTreeWidget` 提供了一种树形视图的数据展示方式,适合于层次化数据结构。它是 `QTreeView` 的子类,并同样集成了一个默认模型以便轻松操作。 #### 数据表示形式 - **QTableWidget**: 主要适用于行列布局的数据展示场景。每一项可以通过单元格的形式访问和修改。这种类型的组件非常适合电子表格样式的应用程序开发需求。 - **QTreeWidget**: 更加灵活,可以支持多级嵌套节点以及展开/折叠功能。对于文件夹浏览器或者配置参数分级显示等功能非常适用。 #### 功能特性对比 | 特性 | QTableWidget | QTreeWidget | |--------------------|--------------------------------------|---------------------------------------| | 显示模式 | 表格 | 树状 | | 支持列数 | 多列 | 单或多列 | | 子项关系 | 不支持 | 支持父节点下的多个子节点 | | 排序能力 | 可按任意一列排序 | 同样具备可定制化的排序选项 | #### 使用示例代码 以下是两个控件简单的初始化例子: ```python from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QTableWidget, QTreeWidget, QTableWidgetItem, QTreeWidgetItem class Example(QWidget): def __init__(self): super().__init__() layout = QVBoxLayout() table_widget = QTableWidget(4, 3) # 创建具有四行三列的表单 tree_widget = QTreeWidget() # 初始化一棵空树 # 设置表头标签给table widget headers_table = ["Column A", "Column B", "Column C"] table_widget.setHorizontalHeaderLabels(headers_table) # 添加一些测试数据到表格里 for row in range(table_widget.rowCount()): for col in range(table_widget.columnCount()): item = QTableWidgetItem(f"Item {row},{col}") table_widget.setItem(row, col, item) # 定义顶层条目并加入tree widget之中 root_item = QTreeWidgetItem(tree_widget, ['Root Item']) child_items = [QTreeWidgetItem(root_item, [f'Child-{i}']) for i in range(3)] layout.addWidget(table_widget) layout.addWidget(tree_widget) self.setLayout(layout) if __name__ == '__main__': app = QApplication([]) ex = Example() ex.show() app.exec_() ``` 上述脚本创建了一个窗口,在其中包含了两种不同风格的信息呈现区域——一个是标准矩阵阵列;另一个则是带有分支链接式的架构。 #### 性能考量 当面对大量动态更新的内容时,应该考虑性能优化策略。例如,如果预计会有频繁增删改查动作发生,则可能需要评估是否采用更底层的 model/view 架构而非直接依赖这些高级别的 widgets 来获得更好的效率表现。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值