Rename SlideableTableView to SlideTableView, and refactor.

This commit is contained in:
Krad
2022-06-07 15:19:14 +08:00
parent 5c218f6ca3
commit 86423e0b8c
8 changed files with 82 additions and 99 deletions

View File

@@ -11,7 +11,7 @@
#include <QHeaderView>
#include <QLabel>
#include <QTableView>
#include "components/SlideableTableView.h"
#include "components/SlideTableView.h"
#include <QPushButton>
#include "src/dialogs/SelectDialog.h"
#include "src/windows/mainwindow.h"
@@ -34,7 +34,7 @@ UserOperationLogForm::UserOperationLogForm(QWidget* parent) {
btn = new QPushButton(header);
headerLayout->addWidget(btn, 0, Qt::AlignLeft);
headerLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding));
table = new SlideableTableView(this);
table = new SlideTableView(this);
layout->addWidget(header);
layout->addWidget(table);
model = new LogFileTableModel(this);
@@ -90,7 +90,7 @@ void UserOperationLogForm::loadUserOperationLog(const QString& fileName, const Q
model->setHeader(header);
// UserOperationLog::getHistoryLogFiles();
delete table;
table = new SlideableTableView(this);
table = new SlideTableView(this);
layout->addWidget(table);
table->setModel(model);

View File

@@ -0,0 +1,59 @@
//
// Created by Krad on 2021/11/23.
//
#include "SlideTableView.h"
#include <cmath>
#include <QScrollBar>
#include <QMouseEvent>
#include <QApplication>
namespace {
const double ROW_HEIGHT = 30.0l;
}
SlideTableView::SlideTableView(QWidget *parent)
: QTableView(parent)
, mIsDragging(false)
, mOriginPosY(-1)
, mOriginScrollBarV(0)
{
}
SlideTableView::~SlideTableView() {
}
void SlideTableView::mousePressEvent(QMouseEvent *ev) {
mIsDragging = true;
mOriginPosY = ev->pos().y();
mOriginScrollBarV = this->verticalScrollBar()->value();
QTableView::mousePressEvent(ev);
}
void SlideTableView::mouseMoveEvent(QMouseEvent *ev) {
if (!mIsDragging) {
QTableView::mouseMoveEvent(ev);
return;
}
if (this->verticalScrollBar()->isVisible()) {
int nv = (int) round(((double) mOriginScrollBarV * ROW_HEIGHT + ((double) (mOriginPosY - ev->pos().y())))
/ ROW_HEIGHT);
int max = this->verticalScrollBar()->maximum();
int min = this->verticalScrollBar()->minimum();
nv = nv > max ? max : (nv < min ? min : nv);
this->verticalScrollBar()->setValue(nv);
}
QTableView::mouseMoveEvent(ev);
}
void SlideTableView::mouseReleaseEvent(QMouseEvent *ev) {
if (!mIsDragging)mIsDragging = false;
QTableView::mouseReleaseEvent(ev);
}
void SlideTableView::currentChanged(const QModelIndex &current, const QModelIndex &previous) {
QTableView::currentChanged(current, previous);
emit currentRowChanged(current.row());
}

View File

@@ -2,15 +2,15 @@
// Created by Krad on 2021/11/23.
//
#ifndef GUI_SLIDEABLETABLEVIEW_H
#define GUI_SLIDEABLETABLEVIEW_H
#ifndef GUI_SLIDETABLEVIEW_H
#define GUI_SLIDETABLEVIEW_H
#include <QTableView>
class SlideableTableView:public QTableView {
class SlideTableView: public QTableView {
Q_OBJECT
public:
explicit SlideableTableView(QWidget *parent = nullptr);
~SlideableTableView();
explicit SlideTableView(QWidget *parent = nullptr);
~SlideTableView() override;
Q_SIGNALS:
void currentRowChanged(int row);
@@ -18,14 +18,13 @@ protected:
void mousePressEvent(QMouseEvent *ev) override ;
void mouseMoveEvent(QMouseEvent *ev) override ;
void mouseReleaseEvent(QMouseEvent *ev) override ;
void currentChanged(const QModelIndex &current,
const QModelIndex &previous) override;
private:
bool isDragging = false;
int ox,oy,ov;
bool mIsDragging;
int mOriginPosY,mOriginScrollBarV;
};
#endif //GUI_SLIDEABLETABLEVIEW_H
#endif //GUI_SLIDETABLEVIEW_H

View File

@@ -1,75 +0,0 @@
//
// Created by Krad on 2021/11/23.
//
#include "SlideableTableView.h"
#include <QScrollBar>
#include <QMouseEvent>
#include <QApplication>
#include <cmath>
SlideableTableView::SlideableTableView(QWidget *parent) : QTableView(parent) {
}
SlideableTableView::~SlideableTableView() {
}
void SlideableTableView::mousePressEvent(QMouseEvent *ev) {
isDragging = true;
ox = ev->pos().x();
oy = ev->pos().y();
ov = this->verticalScrollBar()->value();
QTableView::mousePressEvent(ev);
}
void SlideableTableView::mouseMoveEvent(QMouseEvent *ev) {
if (!isDragging)
{
QTableView::mouseMoveEvent(ev);
return;
} else{
if (this->verticalScrollBar()->isVisible())
{
int nv = (int)round(((double)ov*30.0+((double)(oy-ev->pos().y())))/30.0);
int max = this->verticalScrollBar()->maximum();
int min = this->verticalScrollBar()->minimum();
printf("max:%d, min:%d, nv:%d\r\n", max, min, nv);
nv = nv>max?max:(nv<min?min:nv);
this->verticalScrollBar()->setValue(nv);
}
// if (this->verticalScrollBar()->isVisible())
// {
// this->verticalScrollBar()->setPageStep(this->viewport()->height());
// this->verticalScrollBar()->setRange(0,this->height());
// int nv =this->verticalScrollBar()->value()+(oy-ev->pos().y());
// int max = this->verticalScrollBar()->maximum();
// int min = this->verticalScrollBar()->minimum();
// printf("max:%d, min:%d, nv:%d\r\n", max, min, nv);
// nv = nv>max?max:(nv<min?min:nv);
//
//// this->verticalScrollBar()->setValue(nv);
// return;
// }
}
QTableView::mouseMoveEvent(ev);
}
void SlideableTableView::mouseReleaseEvent(QMouseEvent *ev) {
if (!isDragging)
{
isDragging = false;
}
// if (this->verticalScrollBar()->isVisible())
// {
// QApplication::sendEvent(this->verticalScrollBar(),ev);
// }
QTableView::mouseReleaseEvent(ev);
}
void SlideableTableView::currentChanged(const QModelIndex &current, const QModelIndex &previous) {
QTableView::currentChanged(current, previous);
emit currentRowChanged(current.row());
}

View File

@@ -6,7 +6,7 @@
#include <QHBoxLayout>
#include <QToolButton>
#include <QTableWidget>
#include "components/SlideableTableView.h"
#include "components/SlideTableView.h"
#include <QHeaderView>
#include <QUuid>
#include <QDate>
@@ -53,7 +53,7 @@ SelectFormWidget::SelectFormWidget(QWidget* parent) :
contentLayout->setContentsMargins(5, 5, 0, 5);
this->ui->contentWidget->setLayout(contentLayout);
// TableView for patient
SlideableTableView* table = new SlideableTableView(this);
SlideTableView* table = new SlideTableView(this);
table->setAlternatingRowColors(true);
table->setSelectionMode(QAbstractItemView::SingleSelection);
table->setEditTriggers(QAbstractItemView::NoEditTriggers);
@@ -134,7 +134,7 @@ SelectFormWidget::SelectFormWidget(QWidget* parent) :
btnAdd->setEnabled(!disableALL);
};
//table current row selection changing event
connect(table, &SlideableTableView::currentRowChanged, [=](int row) {
connect(table, &SlideTableView::currentRowChanged, [=](int row) {
setPatientDetail(table, model, edit_patient);
prepareButtons(false);
});
@@ -310,7 +310,7 @@ SelectFormWidget::SelectFormWidget(QWidget* parent) :
prepareButtons(false);
}
void SelectFormWidget::setPatientDetail(const SlideableTableView *table, const QSqlTableModel *model,
void SelectFormWidget::setPatientDetail(const SlideTableView *table, const QSqlTableModel *model,
EditPatientForm *edit_patient) const {
PatientInformation pat;
#define ADD_PATIENT_PROPERTY(val)\

View File

@@ -9,7 +9,7 @@
#include "forms/tabformwidget.h"
#include "EditPatientDialog.h"
class EditPatientForm;
class SlideableTableView;
class SlideTableView;
class SelectFormWidget: public TabFormWidget {
Q_OBJECT
public:
@@ -20,7 +20,7 @@ private:
QString selectedPatientUID;
void
setPatientDetail(const SlideableTableView *table, const QSqlTableModel *model, EditPatientForm *edit_patient) const;
setPatientDetail(const SlideTableView *table, const QSqlTableModel *model, EditPatientForm *edit_patient) const;
};

View File

@@ -13,13 +13,13 @@
#include "db/SQLHelper.h"
#include "models/User.h"
#include <QSqlRecord>
#include "components/SlideableTableView.h"
#include "components/SlideTableView.h"
#include "src/dialogs/AccountFormDialog.h"
#include "event/EventCenter.h"
AccountTableForm::AccountTableForm(QWidget* parent) {
layout = new QVBoxLayout(this);
layout->setMargin(0);
QTableView* table = new SlideableTableView(this);
QTableView* table = new SlideTableView(this);
layout->addWidget(table);
// TableView for patient
table->setAlternatingRowColors(true);

View File

@@ -216,7 +216,7 @@ QLineEdit#led_inface{font-size:15px;border: 0px;}</string>
<number>30</number>
</property>
<item>
<widget class="SlideableTableView" name="tbl_addr"/>
<widget class="SlideTableView" name="tbl_addr"/>
</item>
</layout>
</widget>
@@ -381,7 +381,7 @@ QLineEdit#led_inface{font-size:15px;border: 0px;}</string>
<number>9</number>
</property>
<item>
<widget class="SlideableTableView" name="tbl_route">
<widget class="SlideTableView" name="tbl_route">
<property name="gridStyle">
<enum>Qt::DashLine</enum>
</property>
@@ -557,9 +557,9 @@ QLineEdit#led_inface{font-size:15px;border: 0px;}</string>
<container>1</container>
</customwidget>
<customwidget>
<class>SlideableTableView</class>
<class>SlideTableView</class>
<extends>QTableView</extends>
<header location="global">components/SlideableTableView.h</header>
<header location="global">components/SlideTableView.h</header>
</customwidget>
</customwidgets>
<resources/>