调整代码结构

This commit is contained in:
duanshengchao 2025-06-13 11:21:16 +08:00
parent c3f5824968
commit 034d688796
8 changed files with 183 additions and 97 deletions

View File

@ -61,8 +61,8 @@ void dpConfigurationDialog::initialize()
connect(ui->btnReomve_type, SIGNAL(clicked()), this, SLOT(onBtnClicked_remove_type()));
connect(ui->btnReomve_source, SIGNAL(clicked()), this, SLOT(onBtnClicked_remove_source()));
connect(ui->typeSourceList, SIGNAL(clicked(const QModelIndex&)), this, SLOT(onItemClicked_typeSource(const QModelIndex&)));
connect(ui->dataSourceList, SIGNAL(clicked(const QModelIndex&)), this, SLOT(onItemClicked_dataSource(const QModelIndex&)));
connect(ui->typeSourceList, &QListView::clicked, this, &dpConfigurationDialog::onItemClicked_typeSource);
connect(ui->dataSourceList, &QListView::clicked, this, &dpConfigurationDialog::onItemClicked_dataSource);
///数据类型
//typeSourceList

View File

@ -21,7 +21,6 @@ dpLineChart::~dpLineChart()
{
}
void dpLineChart::initQCP()
{
//m_pCustomPlot->axisRect()->setupFullAxesBox();

View File

@ -10,6 +10,7 @@
#include <QObject>
#include <QLabel>
#include <QMouseEvent>
#include <QBasicTimer>
class QPropertyAnimation;
class CustomBorderContainer : public QObject
@ -45,10 +46,10 @@ public:
void setMinWindowSize(int, int); //设置窗口能缩放的最小尺寸
void setBorderSize(int); //设置边框尺寸
void updateBorder(); //重绘border
void showBorderDraw();
void hideBorderDraw();
void setAutoAdjustDistance(int);
void updateBorder(); //重绘border
void setOperationOption(OperationOptions);
private:
@ -65,14 +66,18 @@ private:
void mouseMoveEvent(QMouseEvent*);
void mouseReleaseEvent(QMouseEvent*);
void paintEvent(QPaintEvent*);
void timerEvent(QTimerEvent*);
private:
borderType m_type;
QPoint m_ptMouseLast;
QPoint m_mouseMoveLengt;
bool m_bMousIsPress;
bool m_bShowPainterDraw;
QString m_strOperation;
CustomBorderContainer* m_pContainer;
QBasicTimer m_repaintTimer;
};
void iniBorder();
@ -84,8 +89,9 @@ private:
void scaleByLeftBottomBorder(const QPoint&);
void scaleByRightTopBorder(const QPoint&);
void scaleByRightBottomBorder(const QPoint&);
void moveByMoveBordr(const QPoint&);
void moveByMoveBorder(const QPoint&);
void autoAdjustGeometry(const QString&);
void updateContentWidget();
QWidget* m_pWidget;
int m_nMinWindowSize_width;

View File

@ -70,7 +70,8 @@ public:
protected:
bool event(QEvent*);
/*void keyPressEvent(QKeyEvent*);
/*void paintEvent(QPaintEvent*);
void keyPressEvent(QKeyEvent*);
void mousePressEvent(QMouseEvent*);
void enterEvent(QEnterEvent*);
void leaveEvent(QEvent*);

View File

@ -3,9 +3,9 @@
#include <QDialog>
#include <QPropertyAnimation>
CustomBorderContainer::CustomBorder::CustomBorder(QWidget* parent, borderType type, CustomBorderContainer* container)
CustomBorderContainer::CustomBorder::CustomBorder(QWidget* parent, borderType type, CustomBorderContainer* container) : QLabel(parent)
{
setParent(parent);
//setParent(parent);
m_type = type;
m_pContainer = container;
m_bMousIsPress = false;
@ -103,6 +103,7 @@ void CustomBorderContainer::CustomBorder::mouseMoveEvent(QMouseEvent* event)
if(m_bMousIsPress)
{
QPoint moveLength = event->globalPosition().toPoint() - m_ptMouseLast;
m_mouseMoveLengt = moveLength;
switch(m_type)
{
case border_left:
@ -130,13 +131,19 @@ void CustomBorderContainer::CustomBorder::mouseMoveEvent(QMouseEvent* event)
m_pContainer->scaleByRightBottomBorder(moveLength);
break;
case border_move:
m_pContainer->moveByMoveBordr(moveLength);
m_pContainer->moveByMoveBorder(moveLength);
break;
default:
break;
}
m_ptMouseLast = event->globalPosition().toPoint();
}
// if(!m_repaintTimer.isActive())
// {
// m_repaintTimer.start(16, this);
// }
QLabel::mouseMoveEvent(event);
}
void CustomBorderContainer::CustomBorder::mouseReleaseEvent(QMouseEvent* event)
@ -146,7 +153,19 @@ void CustomBorderContainer::CustomBorder::mouseReleaseEvent(QMouseEvent* event)
//if(container->m_opOptions & OperationOption::WidgetAutoAdjustGeometry)
if(m_pContainer->m_opOptions.testFlag(OperationOption::WidgetAutoAdjustGeometry))
m_pContainer->autoAdjustGeometry(m_strOperation);
QLabel::mousePressEvent(event);
else
m_pContainer->updateBorder();
QLabel::mouseReleaseEvent(event);
}
void CustomBorderContainer::CustomBorder::timerEvent(QTimerEvent* event)
{
if(event->timerId() == m_repaintTimer.timerId())
{
m_repaintTimer.stop();
m_pContainer->updateContentWidget();
}
}
void CustomBorderContainer::CustomBorder::showPainterDraw(bool bShow)
@ -158,7 +177,7 @@ CustomBorderContainer::CustomBorderContainer(QWidget *parent, int minWindowWidth
: QObject(parent)
{
m_pWidget = parent;
setParent(parent);
//setParent(parent);
m_nMinWindowSize_width = minWindowWidth;
m_nMinWindowSize_height = minWindowHeight;
m_nBorderSize = borderSize;
@ -240,6 +259,96 @@ void CustomBorderContainer::setAutoAdjustDistance(int nDistance)
m_nAutoAdjustDistance = nDistance;
}
void CustomBorderContainer::setOperationOption(OperationOptions options)
{
m_opOptions = options;
}
void CustomBorderContainer::scaleByLeftBorder(const QPoint& moveLength)
{
//不能采用宽度判断:if(m_widget->width()<minWindowWidth),因为一旦进入找个判断条件,就无法再更新宽度,无法重新缩放,因此采用鼠标点位置的实时计算来判断
if((m_pWidget->pos().x() + moveLength.x()) > (m_pWidget->pos().x() + m_pWidget->width() - m_nMinWindowSize_width)) //左边界动态调整x坐标和width判断这两个值的实时关系
return;
m_pWidget->setGeometry(m_pWidget->pos().x() + moveLength.x(), m_pWidget->pos().y(), m_pWidget->width() - moveLength.x(), m_pWidget->height());
//updateBorder();因为moveBorder会显示出来所以只对它实时刷新
m_pBorder_Move->setGeometry(m_nBorderSize, m_nBorderSize, m_pWidget->width() - m_nBorderSize * 2, m_nBorderSize * 10);
}
void CustomBorderContainer::scaleByRightBorder(const QPoint& moveLength)
{
if((m_pWidget->pos().x() + m_pWidget->width() + moveLength.x()) < (m_pWidget->pos().x() + m_nMinWindowSize_width)) //有边界动态调整width判断width和x坐标的关系
return;
m_pWidget->setGeometry(m_pWidget->pos().x(), m_pWidget->pos().y(), m_pWidget->width() + moveLength.x(), m_pWidget->height());
//updateBorder();
m_pBorder_Move->setGeometry(m_nBorderSize, m_nBorderSize, m_pWidget->width() - m_nBorderSize * 2, m_nBorderSize * 10);
}
void CustomBorderContainer::scaleByTopBorder(const QPoint& moveLength)
{
if((m_pWidget->pos().y() + moveLength.y()) > (m_pWidget->pos().y() + m_pWidget->height() - m_nMinWindowSize_height))
return;
m_pWidget->setGeometry(m_pWidget->pos().x(), m_pWidget->pos().y() + moveLength.y(), m_pWidget->width(), m_pWidget->height() - moveLength.y());
//updateBorder();
m_pBorder_Move->setGeometry(m_nBorderSize, m_nBorderSize, m_pWidget->width() - m_nBorderSize * 2, m_nBorderSize * 10);
}
void CustomBorderContainer::scaleByBottomBorder(const QPoint& moveLength)
{
if((m_pWidget->pos().y() + m_pWidget->height() + moveLength.y()) < (m_pWidget->pos().y() + m_nMinWindowSize_height))
return;
m_pWidget->setGeometry(m_pWidget->pos().x(), m_pWidget->pos().y(), m_pWidget->width(), m_pWidget->height() + moveLength.y());
//updateBorder();
m_pBorder_Move->setGeometry(m_nBorderSize, m_nBorderSize, m_pWidget->width() - m_nBorderSize * 2, m_nBorderSize * 10);
}
void CustomBorderContainer::scaleByLeftTopBorder(const QPoint& moveLength)
{
if((m_pWidget->pos().x() + moveLength.x()) > (m_pWidget->pos().x() + m_pWidget->width() - m_nMinWindowSize_width)
|| (m_pWidget->pos().y() + moveLength.y()) > (m_pWidget->pos().y() + m_pWidget->height() - m_nMinWindowSize_height))
return;
m_pWidget->setGeometry(m_pWidget->pos().x() + moveLength.x(), m_pWidget->pos().y() + moveLength.y(), m_pWidget->width() - moveLength.x(), m_pWidget->height() - moveLength.y());
//updateBorder();
m_pBorder_Move->setGeometry(m_nBorderSize, m_nBorderSize, m_pWidget->width() - m_nBorderSize * 2, m_nBorderSize * 10);
}
void CustomBorderContainer::scaleByLeftBottomBorder(const QPoint& moveLength)
{
if((m_pWidget->pos().x() + moveLength.x()) > (m_pWidget->pos().x() + m_pWidget->width() - m_nMinWindowSize_width)
|| (m_pWidget->pos().y() + m_pWidget->height() + moveLength.y()) < (m_pWidget->pos().y() + m_nMinWindowSize_height))
return;
m_pWidget->setGeometry(m_pWidget->pos().x() + moveLength.x(), m_pWidget->pos().y(), m_pWidget->width() - moveLength.x(), m_pWidget->height() + moveLength.y());
//updateBorder();
m_pBorder_Move->setGeometry(m_nBorderSize, m_nBorderSize, m_pWidget->width() - m_nBorderSize * 2, m_nBorderSize * 10);
}
void CustomBorderContainer::scaleByRightTopBorder(const QPoint& moveLength)
{
if((m_pWidget->pos().x() + m_pWidget->width() + moveLength.x()) < (m_pWidget->pos().x() + m_nMinWindowSize_width)
|| (m_pWidget->pos().y() + moveLength.y()) > (m_pWidget->pos().y() + m_pWidget->height() - m_nMinWindowSize_height))
return;
m_pWidget->setGeometry(m_pWidget->pos().x(), m_pWidget->pos().y() + moveLength.y(), m_pWidget->width() + moveLength.x(), m_pWidget->height() - moveLength.y());
//updateBorder();
m_pBorder_Move->setGeometry(m_nBorderSize, m_nBorderSize, m_pWidget->width() - m_nBorderSize * 2, m_nBorderSize * 10);
}
void CustomBorderContainer::scaleByRightBottomBorder(const QPoint& moveLength)
{
if((m_pWidget->pos().x() + m_pWidget->width() + moveLength.x()) < (m_pWidget->pos().x() + m_nMinWindowSize_width)
|| (m_pWidget->pos().y() + m_pWidget->height() + moveLength.y()) < (m_pWidget->pos().y() + m_nMinWindowSize_height))
return;
m_pWidget->setGeometry(m_pWidget->pos().x(), m_pWidget->pos().y(), m_pWidget->width() + moveLength.x(), m_pWidget->height() + moveLength.y());
//updateBorder();
m_pBorder_Move->setGeometry(m_nBorderSize, m_nBorderSize, m_pWidget->width() - m_nBorderSize * 2, m_nBorderSize * 10);
}
void CustomBorderContainer::moveByMoveBorder(const QPoint& moveLength)
{
//m_pWidget->setUpdatesEnabled(false);
m_pWidget->move(moveLength + m_pWidget->pos());
//m_pWidget->setUpdatesEnabled(true);
}
void CustomBorderContainer::updateBorder()
{
m_pBorder_Left->setGeometry(0, m_nBorderSize, m_nBorderSize, m_pWidget->height() - m_nBorderSize * 2);
@ -253,86 +362,9 @@ void CustomBorderContainer::updateBorder()
m_pBorder_Move->setGeometry(m_nBorderSize, m_nBorderSize, m_pWidget->width() - m_nBorderSize * 2, m_nBorderSize * 10);
}
void CustomBorderContainer::setOperationOption(OperationOptions options)
void CustomBorderContainer::updateContentWidget()
{
m_opOptions = options;
}
void CustomBorderContainer::scaleByLeftBorder(const QPoint& moveLength)
{
//不能采用宽度判断:if(m_widget->width()<minWindowWidth),因为一旦进入找个判断条件,就无法再更新宽度,无法重新缩放,因此采用鼠标点位置的实时计算来判断
if((m_pWidget->pos().x() + moveLength.x()) > (m_pWidget->pos().x() + m_pWidget->width() - m_nMinWindowSize_width)) //左边界动态调整x坐标和width判断这两个值的实时关系
return;
m_pWidget->setGeometry(m_pWidget->pos().x() + moveLength.x(), m_pWidget->pos().y(), m_pWidget->width() - moveLength.x(), m_pWidget->height());
updateBorder();
}
void CustomBorderContainer::scaleByRightBorder(const QPoint& moveLength)
{
if((m_pWidget->pos().x() + m_pWidget->width() + moveLength.x()) < (m_pWidget->pos().x() + m_nMinWindowSize_width)) //有边界动态调整width判断width和x坐标的关系
return;
m_pWidget->setGeometry(m_pWidget->pos().x(), m_pWidget->pos().y(), m_pWidget->width() + moveLength.x(), m_pWidget->height());
updateBorder();
}
void CustomBorderContainer::scaleByTopBorder(const QPoint& moveLength)
{
if((m_pWidget->pos().y() + moveLength.y()) > (m_pWidget->pos().y() + m_pWidget->height() - m_nMinWindowSize_height))
return;
m_pWidget->setGeometry(m_pWidget->pos().x(), m_pWidget->pos().y() + moveLength.y(), m_pWidget->width(), m_pWidget->height() - moveLength.y());
updateBorder();
}
void CustomBorderContainer::scaleByBottomBorder(const QPoint& moveLength)
{
if((m_pWidget->pos().y() + m_pWidget->height() + moveLength.y()) < (m_pWidget->pos().y() + m_nMinWindowSize_height))
return;
m_pWidget->setGeometry(m_pWidget->pos().x(), m_pWidget->pos().y(), m_pWidget->width(), m_pWidget->height() + moveLength.y());
updateBorder();
}
void CustomBorderContainer::scaleByLeftTopBorder(const QPoint& moveLength)
{
if((m_pWidget->pos().x() + moveLength.x()) > (m_pWidget->pos().x() + m_pWidget->width() - m_nMinWindowSize_width)
|| (m_pWidget->pos().y() + moveLength.y()) > (m_pWidget->pos().y() + m_pWidget->height() - m_nMinWindowSize_height))
return;
m_pWidget->setGeometry(m_pWidget->pos().x() + moveLength.x(), m_pWidget->pos().y() + moveLength.y(), m_pWidget->width() - moveLength.x(), m_pWidget->height() - moveLength.y());
updateBorder();
}
void CustomBorderContainer::scaleByLeftBottomBorder(const QPoint& moveLength)
{
if((m_pWidget->pos().x() + moveLength.x()) > (m_pWidget->pos().x() + m_pWidget->width() - m_nMinWindowSize_width)
|| (m_pWidget->pos().y() + m_pWidget->height() + moveLength.y()) < (m_pWidget->pos().y() + m_nMinWindowSize_height))
return;
m_pWidget->setGeometry(m_pWidget->pos().x() + moveLength.x(), m_pWidget->pos().y(), m_pWidget->width() - moveLength.x(), m_pWidget->height() + moveLength.y());
updateBorder();
}
void CustomBorderContainer::scaleByRightTopBorder(const QPoint& moveLength)
{
if((m_pWidget->pos().x() + m_pWidget->width() + moveLength.x()) < (m_pWidget->pos().x() + m_nMinWindowSize_width)
|| (m_pWidget->pos().y() + moveLength.y()) > (m_pWidget->pos().y() + m_pWidget->height() - m_nMinWindowSize_height))
return;
m_pWidget->setGeometry(m_pWidget->pos().x(), m_pWidget->pos().y() + moveLength.y(), m_pWidget->width() + moveLength.x(), m_pWidget->height() - moveLength.y());
updateBorder();
}
void CustomBorderContainer::scaleByRightBottomBorder(const QPoint& moveLength)
{
if((m_pWidget->pos().x() + m_pWidget->width() + moveLength.x()) < (m_pWidget->pos().x() + m_nMinWindowSize_width)
|| (m_pWidget->pos().y() + m_pWidget->height() + moveLength.y()) < (m_pWidget->pos().y() + m_nMinWindowSize_height))
return;
m_pWidget->setGeometry(m_pWidget->pos().x(), m_pWidget->pos().y(), m_pWidget->width() + moveLength.x(), m_pWidget->height() + moveLength.y());
updateBorder();
}
void CustomBorderContainer::moveByMoveBordr(const QPoint& moveLength)
{
//m_pWidget->setUpdatesEnabled(false);
m_pWidget->move(moveLength + m_pWidget->pos());
//m_pWidget->setUpdatesEnabled(true);
m_pWidget->update();
}
void CustomBorderContainer::autoAdjustGeometry(const QString& strOperation)
@ -349,7 +381,7 @@ void CustomBorderContainer::autoAdjustGeometry(const QString& strOperation)
{
int nDistance_X_Left2Left = m_pWidget->geometry().left();
int nDistance_X_Right2Right = m_pWidget->geometry().right() - parentWiget->width();
int nDistance_X = m_nAutoAdjustDistance + 1;
int nDistance_X;
if(nDistance_X_Left2Left == 0)
nDistance_X = nDistance_X_Right2Right;
else if(nDistance_X_Right2Right == 0)
@ -361,7 +393,7 @@ void CustomBorderContainer::autoAdjustGeometry(const QString& strOperation)
int nDistance_Y_Top2Top = m_pWidget->geometry().top();
int nDistance_Y_Bottom2Bottom = m_pWidget->geometry().bottom() - parentWiget->height();
int nDistance_Y = m_nAutoAdjustDistance + 1;
int nDistance_Y;
if(nDistance_Y_Top2Top == 0)
nDistance_Y = nDistance_Y_Bottom2Bottom;
else if(nDistance_Y_Bottom2Bottom == 0)

View File

@ -51,7 +51,7 @@ Dashboard::Dashboard(const QString& strName, QObject *parent)
Dashboard::~Dashboard()
{
//在这里m_pDisplayArea和m_pTabButton不需要进行手动析构因为QObject建立起的父子结构会自动析构自动析构时不会将其置为nullptr所以if判断无效会引起'SIGSEGV'(存储器段错误)报错
//m_pDisplayArea和m_pTab不需要手动析构因为QObject建立起的父子结构会自动析构自动析构时不会将其置为nullptr所以if判断无效会引起'SIGSEGV'(存储器段错误)报错
if(m_pTabMenu)
{
delete m_pTabMenu;

View File

@ -31,6 +31,8 @@ DataPanel::DataPanel(QWidget *parent, DataPanelType type)
: QDialog(parent)
{
setWindowFlags(Qt::FramelessWindowHint | Qt::SubWindow);
//setAttribute(Qt::WA_StaticContents, false); // 禁用静态内容优化
//setAttribute(Qt::WA_PaintOnScreen, false); // 默认使用双缓冲
m_strName = "";
m_bMouseEnter = false;
@ -38,12 +40,17 @@ DataPanel::DataPanel(QWidget *parent, DataPanelType type)
m_pContentWidget = nullptr;
m_pScrollArea = nullptr;
QWidget* centralWidget = new QWidget(this);
centralWidget->setObjectName("centralWidget");
centralWidget->setStyleSheet("QWidget #centralWidget{\n"
/*setStyleSheet("QDialog{\n"
" border:2px solid rgb(76,88,105);\n"
" background-color:rgba(24,32,38,250);\n"
"}\n");
"}\n");*/
QWidget* centralWidget = new QWidget(this);
centralWidget->setObjectName("centralWidget");
/*centralWidget->setStyleSheet("QWidget #centralWidget{\n"
" border:2px solid rgb(76,88,105);\n"
" background-color:rgba(24,32,38,250);\n"
"}\n");*/
QBoxLayout* centralLayout = new QBoxLayout(QBoxLayout::TopToBottom, this);
centralLayout->setContentsMargins(0, 0, 0, 0);
centralLayout->addWidget(centralWidget);
@ -67,6 +74,7 @@ DataPanel::DataPanel(QWidget *parent, DataPanelType type)
connect(m_pToolWidget->ui->btnFullScree, SIGNAL(clicked()), this, SLOT(onToolBtnClicked_fullScreen()));
connect(m_pToolWidget->ui->btnMenu, SIGNAL(clicked()), this, SLOT(onToolBtnClicked_menu()));
m_pToolWidget->raise();
m_pToolWidget->hide();
m_pToolMenu = new CustomMenu(this);
connect(m_pToolMenu, SIGNAL(aboutToHide()), this, SLOT(onAboutToHide_toolMenu()));
@ -97,7 +105,7 @@ bool DataPanel::event(QEvent* event)
}
else if(event->type() == QEvent::Show)
{
m_pToolWidget->move(this->width() - m_pToolWidget->width() - 8, 3);
//m_pToolWidget->move(this->width() - m_pToolWidget->width() - 8, 3);
m_pConfigurationWidget->move((this->width() - m_pConfigurationWidget->width()) * 0.5, (this->height() - m_pConfigurationWidget->height()) * 0.5);
}
else if(event->type() == QEvent::Resize || event->type() == QEvent::Move)
@ -114,6 +122,7 @@ bool DataPanel::event(QEvent* event)
else if(event->type() == QEvent::Enter)
{
//qDebug() << "Enter";
m_pToolWidget->move(this->width() - m_pToolWidget->width() - 8, 3);
m_pToolWidget->show();
QString strCurState = m_pToolWidget->ui->btnFullScree->property("currentState").toString();
if(strCurState == "enterFullScreen")
@ -128,11 +137,49 @@ bool DataPanel::event(QEvent* event)
m_pCustomBorderContainer->hideBorderDraw();
}
}
else if(event->type() == QEvent::Paint)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
// 绘制背景
painter.fillRect(rect(), QColor(24, 32, 38, 250)); // 原样式表背景色
// 绘制边框
QPen pen(QColor(76, 88, 105), 2); // 原样式表边框颜色和宽度
painter.setPen(pen);
painter.drawRect(rect().adjusted(1, 1, -1, -1));
}
return QDialog::event(event);
}
/*void DataPanel::keyPressEvent(QKeyEvent* e)
/*void DataPanel::paintEvent(QPaintEvent* event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
// 绘制背景
painter.fillRect(rect(), QColor(24, 32, 38, 250)); // 原样式表背景色
// 绘制边框
QPen pen(QColor(76, 88, 105), 2); // 原样式表边框颜色和宽度
painter.setPen(pen);
painter.drawRect(rect().adjusted(1, 1, -1, -1));
// 双缓冲绘制
QPainter painter(this);
QPixmap buffer(size());
buffer.fill(Qt::transparent);
QPainter bufferPainter(&buffer);
bufferPainter.setRenderHint(QPainter::Antialiasing);
// 绘制带边框的背景
bufferPainter.setPen(QPen(QColor(76,88,105),2));
bufferPainter.setBrush(QColor(24,32,38,250));
bufferPainter.drawRoundedRect(rect().adjusted(1, 1, -1, -1), 0, 0);
painter.drawPixmap(0, 0, buffer);
}
void DataPanel::keyPressEvent(QKeyEvent* e)
{
if(e->key() == Qt::Key_Escape)
return;

View File

@ -76,6 +76,7 @@ void TimeLineWidget::mouseMoveEvent(QMouseEvent* e)
d_ptr->m_ptMousePress = e->pos();
d_ptr->m_timeMousePress = d_ptr->m_timeLineItem->time();
setDisplayState(historical);
emit viewHistoricalData(dateTime);
}
else