如何设置QML TreeView指示器的颜色?已尝试分支委托样式
嘿,我来帮你搞定TreeView指示器颜色的问题~你之前的写法之所以没生效,是因为branchDelegate得是一个完整的Component,不能直接丢个颜色值进去。下面分两种常用的Qt Quick Controls版本给你正确的实现方式:
修改TreeView指示器颜色的正确方法
针对Qt Quick Controls 1
在Controls 1里,TreeView的样式是通过TreeViewStyle来定义的,你需要把branchDelegate封装成一个Component,在里面自定义绘制指示器的元素(比如Image或者形状),然后设置颜色。示例代码如下:
TreeView { id: treeView width: 300 height: 400 style: TreeViewStyle { branchDelegate: Component { Rectangle { width: 16 height: 16 color: "transparent" // 背景透明,只显示指示器内容 // 用图片做指示器,设置红色 Image { anchors.centerIn: parent // 根据展开状态切换箭头方向 source: styleData.isExpanded ? "qrc:/arrow-down.svg" : "qrc:/arrow-right.svg" color: "red" // 这里设置你想要的颜色 } } } } // 补充必要的model和列委托 model: YourTreeModel {} columnDelegate: Text { text: styleData.value } }
如果不想用图片,也可以用纯形状绘制指示器,比如用Path画箭头:
branchDelegate: Component { Path { width: 10 height: 10 fill: "red" // 指示器颜色 visible: styleData.hasChildren // 只有有子项时显示 PathLine { x: 10; y: 5 } PathLine { x: 5; y: 10 } PathLine { x: 5; y: 0 } PathLine { x: 10; y: 5 } } }
针对Qt Quick Controls 2
Controls 2的TreeView结构更简洁,直接在delegate里设置indicator属性就能自定义指示器样式:
TreeView { id: treeView width: 300 height: 400 model: YourTreeModel {} delegate: ItemDelegate { Text { text: model.display } // 自定义红色指示器 indicator: Image { anchors.verticalCenter: parent.verticalCenter source: model.hasChildren ? (model.expanded ? "qrc:/arrow-down.svg" : "qrc:/arrow-right.svg") : "" color: "red" } } }
简单总结下:你之前的错误在于没有把branchDelegate包装成Component,只要按照上面的方式用Component包裹自定义的指示器元素,就能轻松设置颜色啦~
内容的提问来源于stack exchange,提问作者GrahamSim
相关产品推荐
相关产品推荐

