-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathtreeview.cc
118 lines (106 loc) · 3.06 KB
/
treeview.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include "treeview.hpp"
#include <QDebug>
#include <QHeaderView>
#include <QMouseEvent>
#include <QScrollBar>
TreeView::TreeView(QWidget *parent)
: QTreeView(parent)
{
setupUI();
buildConnect();
}
auto TreeView::selectedIndexes() const -> QModelIndexList
{
QModelIndexList indexList(QTreeView::selectedIndexes());
QModelIndexList list;
for (const auto &index : std::as_const(indexList)) {
QModelIndex i(index.siblingAtColumn(0));
if (list.contains(i)) {
continue;
}
list.append(i);
}
return list;
}
auto TreeView::allIndexes() const -> QModelIndexList
{
QModelIndexList list;
QAbstractItemModel *model = this->model();
if (!model) {
return list;
}
for (int i = 0; i < model->rowCount(); i++) {
list.append(model->index(i, 0));
}
return list;
}
auto TreeView::pageSize() -> int
{
m_pageSize = height() / 50 + 2;
return m_pageSize;
}
void TreeView::onCheckAll(bool state)
{
state ? selectAll() : clearSelection();
}
void TreeView::onResize()
{
QAbstractItemModel *model = this->model();
if (!model) {
return;
}
int column = model->columnCount();
int width = (this->width() - 20) / column;
for (int i = 0; i < column; i++) {
setColumnWidth(i, width);
}
}
void TreeView::onFetchMore(int value)
{
QAbstractItemModel *model = this->model();
if (!model) {
return;
}
if (model->rowCount() < m_pageSize || model->rowCount() >= m_currentMaxCount
|| verticalScrollBar()->maximum() != value) {
return;
}
verticalScrollBar()->setEnabled(false);
emit fetchMore();
verticalScrollBar()->setEnabled(true);
}
void TreeView::showEvent(QShowEvent *event)
{
QTreeView::showEvent(event);
QMetaObject::invokeMethod(this, "onResize", Qt::QueuedConnection);
}
void TreeView::setupUI()
{
setSortingEnabled(true);
setDragEnabled(true);
setAnimated(true);
setAlternatingRowColors(true);
setIndentation(7);
//setHeaderHidden(true);
setEditTriggers(QAbstractItemView::NoEditTriggers);
setSelectionMode(QAbstractItemView::ExtendedSelection);
// setSelectionBehavior(QAbstractItemView::SelectRows);
setUniformRowHeights(false);
// header()->setVisible(true);
header()->setHighlightSections(true);
//header()->setDefaultAlignment(Qt::AlignVCenter);
// header()->setSectionResizeMode(QHeaderView::Stretch);
header()->setStretchLastSection(true);
setIconSize(QSize(30, 30));
viewport()->setAttribute(Qt::WA_Hover);
setStyleSheet("QTreeView{border:none; show-decoration-selected: 1;}"
"QTreeView::item{height: 50px;border: 1px solid transparent;}"
"QTreeView::branch:hover,"
"QTreeView::item:hover{background: #EBF5FF;}"
"QTreeView::branch:selected,"
"QTreeView::item:selected{background: #b8ceff; color:#222222;}");
}
void TreeView::buildConnect()
{
connect(verticalScrollBar(), &QScrollBar::valueChanged, this, &TreeView::onFetchMore);
}