-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathheaderview.h
52 lines (48 loc) · 1.44 KB
/
headerview.h
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
#pragma once
#include <qheaderview.h>
#include <qpainter.h>
#include "treeitem.h"
#include <qevent.h>
#include <QApplication>
class HeaderView : public QHeaderView
{
Q_OBJECT
public:
MultiColumnOrder orderCols;
std::map<int, Qt::SortOrder> sortColMap;
bool ableMultiSort = false;
private:
enum MouseState
{
NoState = 0,
PressState,
MoveState
};
MouseState mstate = NoState;
QCursor stageCursor;
int toHideIndex;
bool bLeftMousePressed = false; ///用于重写sectoinClicked信号
public:
HeaderView(Qt::Orientation orientation, QWidget *parent = nullptr);
~HeaderView();
/*override*/
void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const override;
///action & emit signal
/// hide action will emit resize signal
void hideSectionAndEmitSignal(int logicalIndex);
/// show action will emit resize signal
void showSectionAndEmitSignal(int logicalIndex);
/// return first visiable section's logical index
int firstVisiableLogicalIndex();
protected:
void mousePressEvent(QMouseEvent *e) override;
void mouseMoveEvent(QMouseEvent* e) override;
void mouseReleaseEvent(QMouseEvent* e) override;
signals:
void hideSectionSignal(int logicalIndex);
void showSectionSignal(int logicalIndex);
void sectionRightClicked(int logicalIndex);
void sectionSingleClicked(int logicalIndex); ////与Qt自带的sectionClicked信号区别
public slots:
void onSectionClicked(int logicalIndex);
};