QTreeWidget 仿表格显示
思路
使用QSS的 border 属性拼凑一个表格样式出来
- branch 只显示下边框
- branch 添加装饰图片,三角形图案
- item 只显示右边框和下边框
- QTreeView 有个选定项属性,需要设置背景色
QSS 样式表
QTreeWidget{
border:1px solid black;
alternate-background-color:lightgray;
outline:none;
selection-background-color:transparent;
}
QTreeView::item{
border:1px solid black;
border-left:transparent;
border-top:transparent;
}
QTreeView::branch{
border:1px solid black;
border-right:transparent;
border-left:transparent;
border-top:transparent;
}
QTreeView::item:selected:active{
color:white;
background:lightblue;
}
QTreeView::branch:has-children:!has-siblings:closed,
QTreeView::branch:closed:has-children:has-siblings{
image:url(stylesheet-branch-closed.png);
}
QTreeView::branch:open:has-children:!has-siblings,
QTreeView::branch:open:has-children:has-siblings{
image:url(stylesheet-branch-open.png);
}
演示代码
凑个字数
#include "../../DebugTools/DebugTool.h"
#include <QtWidgets>
QString fileName_Qss = "style.qss";
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
loadQssFile();
watchQssFile();
QTreeWidget tree;
tree.header()->hide();
addShortcut(&tree);
tree.setColumnCount(3);
tree.setAlternatingRowColors(true);
QList<QTreeWidgetItem*> list;
for (int i = 0; i < 4; ++i) {
QStringList strs;
for (int j = 0; j < 3; ++j) {
strs << QString("%1_%2").arg(i).arg(j);
}
QTreeWidgetItem* item = new QTreeWidgetItem(strs);
if (i == 2) {
list[1]->addChild(item);
}
list << item;
}
tree.addTopLevelItems(list);
tree.show();
return a.exec();
}