Files
cbh/ElaWidgetTools/ElaTableView.cpp
2025-09-20 01:41:33 +08:00

72 lines
2.1 KiB
C++

#include "ElaTableView.h"
#include <QHeaderView>
#include <QMouseEvent>
#include "DeveloperComponents/ElaTableViewStyle.h"
#include "ElaScrollBar.h"
#include "ElaTableViewPrivate.h"
ElaTableView::ElaTableView(QWidget *parent) : QTableView(parent), d_ptr(new ElaTableViewPrivate()) {
Q_D(ElaTableView);
d->q_ptr = this;
setMouseTracking(true);
setObjectName("ElaTableView");
setStyleSheet("QTableView{background-color:transparent;}"
"QHeaderView{background-color:transparent;border:0px;}");
setShowGrid(false);
setVerticalScrollBar(new ElaScrollBar(this));
setHorizontalScrollBar(new ElaScrollBar(this));
this->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
this->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
d->_tableViewStyle = new ElaTableViewStyle(style());
setStyle(d->_tableViewStyle);
}
ElaTableView::~ElaTableView() {
Q_D(ElaTableView);
delete d->_tableViewStyle;
}
void ElaTableView::setHeaderMargin(int headerMargin) {
Q_D(ElaTableView);
if (headerMargin >= 0) {
d->_tableViewStyle->setHeaderMargin(headerMargin);
doItemsLayout();
}
}
int ElaTableView::getHeaderMargin() const {
Q_D(const ElaTableView);
return d->_tableViewStyle->getHeaderMargin();
}
void ElaTableView::showEvent(QShowEvent *event) {
Q_EMIT tableViewShow();
QTableView::showEvent(event);
}
void ElaTableView::hideEvent(QHideEvent *event) {
Q_EMIT tableViewHide();
QTableView::hideEvent(event);
}
void ElaTableView::mouseMoveEvent(QMouseEvent *event) {
Q_D(ElaTableView);
if (selectionBehavior() == QAbstractItemView::SelectRows) {
d->_tableViewStyle->setCurrentHoverRow(indexAt(event->pos()).row());
update();
}
QTableView::mouseMoveEvent(event);
}
void ElaTableView::leaveEvent(QEvent *event) {
Q_D(ElaTableView);
if (selectionBehavior() == QAbstractItemView::SelectRows) {
d->_tableViewStyle->setCurrentHoverRow(-1);
update();
}
QTableView::leaveEvent(event);
}