2024-10-10 16:59:51 +08:00
|
|
|
|
#include "dashboard.h"
|
2024-11-07 12:08:56 +08:00
|
|
|
|
#include "dashboardFrame.h"
|
2024-10-10 16:59:51 +08:00
|
|
|
|
#include "dataPanel.h"
|
2024-11-05 09:24:21 +08:00
|
|
|
|
#include "customTab.h"
|
2024-10-10 16:59:51 +08:00
|
|
|
|
|
|
|
|
|
|
#include <QDialog>
|
|
|
|
|
|
#include <QPushButton>
|
|
|
|
|
|
#include <QMenu>
|
|
|
|
|
|
#include <QVBoxLayout>
|
|
|
|
|
|
#include <QKeyEvent>
|
|
|
|
|
|
|
|
|
|
|
|
#define tabButtonHeight 41
|
|
|
|
|
|
Dashboard::Dashboard(const QString& strName, QObject *parent)
|
|
|
|
|
|
: QObject(parent)
|
|
|
|
|
|
{
|
2024-11-07 12:08:56 +08:00
|
|
|
|
m_pFrame = nullptr;
|
2024-10-10 16:59:51 +08:00
|
|
|
|
//displayArea
|
|
|
|
|
|
m_pDisplayArea = new QWidget();
|
2024-11-07 12:08:56 +08:00
|
|
|
|
//m_pDisplayArea->setObjectName("displayArea");
|
2024-10-10 16:59:51 +08:00
|
|
|
|
//m_pDisplayArea->setStyleSheet("QWidget #displayArea {background-color: rgb(18, 25, 30);}");
|
2024-11-07 12:08:56 +08:00
|
|
|
|
m_pDisplayAreaLayout = nullptr;
|
2024-11-05 09:24:21 +08:00
|
|
|
|
//tab,自适应text内容
|
|
|
|
|
|
m_pTab = new CustomTab();
|
2024-11-08 17:09:56 +08:00
|
|
|
|
m_pTab->setDashboard(this);
|
2024-11-05 09:24:21 +08:00
|
|
|
|
//m_pTabButton->setIcon(QIcon(":/images/btn_float_default.png"));
|
|
|
|
|
|
connect(m_pTab, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(contextMenu_tab(const QPoint&)));
|
2024-10-10 16:59:51 +08:00
|
|
|
|
//右键菜单
|
2024-11-05 09:24:21 +08:00
|
|
|
|
m_pTabMenu = new QMenu();
|
|
|
|
|
|
m_pTabMenu->setStyleSheet("QMenu{\n"
|
2024-10-10 16:59:51 +08:00
|
|
|
|
" background-color:rgb(36,43,50);\n"
|
|
|
|
|
|
" border:1px solid rgb(6, 6, 6);\n"
|
|
|
|
|
|
"}\n"
|
|
|
|
|
|
"QMenu:item{\n"
|
|
|
|
|
|
" padding-left:20px;\n"
|
|
|
|
|
|
" padding-right:20px;\n"
|
|
|
|
|
|
" font:9pt \"微软雅黑\";\n"
|
|
|
|
|
|
" color:rgb(220,220,220);\n"
|
|
|
|
|
|
" height:26px;\n"
|
|
|
|
|
|
"}\n"
|
|
|
|
|
|
"QMenu:item:selected{\n"
|
|
|
|
|
|
" background-color: rgba(67,160,249, 80);\n"
|
|
|
|
|
|
"}\n");
|
2024-11-05 09:24:21 +08:00
|
|
|
|
m_pTabMenu->addAction(QString::fromWCharArray(L"删除"), this, SLOT(onAction_remove()));
|
|
|
|
|
|
m_pTabMenu->addAction(QString::fromWCharArray(L"重命名"), this, SLOT(onAction_rename()));
|
2024-10-10 16:59:51 +08:00
|
|
|
|
|
|
|
|
|
|
m_nPanenlNameNumber = 0;
|
|
|
|
|
|
|
|
|
|
|
|
setName(strName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Dashboard::~Dashboard()
|
|
|
|
|
|
{
|
2024-11-05 09:24:21 +08:00
|
|
|
|
//在这里m_pDisplayArea和m_pTabButton不需要进行手动析构,因为QObject建立起的父子结构会自动析构,自动析构时不会将其置为nullptr,所以if判断无效,会引起'SIGSEGV'(存储器段错误)报错
|
|
|
|
|
|
if(m_pTabMenu)
|
2024-10-10 16:59:51 +08:00
|
|
|
|
{
|
2024-11-05 09:24:21 +08:00
|
|
|
|
delete m_pTabMenu;
|
|
|
|
|
|
m_pTabMenu = nullptr;
|
2024-10-10 16:59:51 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-11-05 09:24:21 +08:00
|
|
|
|
void Dashboard::deleteSubWidgets()
|
2024-10-10 16:59:51 +08:00
|
|
|
|
{
|
2024-11-05 09:24:21 +08:00
|
|
|
|
if(m_pTab)
|
|
|
|
|
|
{
|
|
|
|
|
|
delete m_pTab;
|
|
|
|
|
|
m_pTab = nullptr;
|
|
|
|
|
|
}
|
2024-10-10 16:59:51 +08:00
|
|
|
|
|
2024-11-05 09:24:21 +08:00
|
|
|
|
if(m_pDisplayArea)
|
2024-10-10 16:59:51 +08:00
|
|
|
|
{
|
2024-11-05 09:24:21 +08:00
|
|
|
|
delete m_pDisplayArea;
|
|
|
|
|
|
m_pDisplayArea = nullptr;
|
2024-10-10 16:59:51 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-11-14 09:19:14 +08:00
|
|
|
|
const QString& Dashboard::name()
|
2024-10-10 16:59:51 +08:00
|
|
|
|
{
|
|
|
|
|
|
return m_strName;
|
|
|
|
|
|
}
|
|
|
|
|
|
void Dashboard::setName(const QString& strName)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_strName = strName;
|
2024-11-05 09:24:21 +08:00
|
|
|
|
m_pTab->setText(strName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-11-07 12:08:56 +08:00
|
|
|
|
void Dashboard::setFrame(DashboardFrame* frame)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pFrame = frame;
|
|
|
|
|
|
setParent(m_pFrame);
|
|
|
|
|
|
}
|
|
|
|
|
|
DashboardFrame* Dashboard::frame()
|
|
|
|
|
|
{
|
|
|
|
|
|
return m_pFrame;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-11-05 09:24:21 +08:00
|
|
|
|
void Dashboard::setDisplayAreaLayout(QHBoxLayout* pLayout)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pDisplayAreaLayout = pLayout;
|
2024-10-10 16:59:51 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-11-05 09:24:21 +08:00
|
|
|
|
CustomTab* Dashboard::tab()
|
2024-10-10 16:59:51 +08:00
|
|
|
|
{
|
2024-11-05 09:24:21 +08:00
|
|
|
|
return m_pTab;
|
2024-10-10 16:59:51 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QWidget* Dashboard::displayArea()
|
|
|
|
|
|
{
|
|
|
|
|
|
return m_pDisplayArea;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-11-05 09:24:21 +08:00
|
|
|
|
void Dashboard::setActive(bool bActive)
|
2024-10-10 16:59:51 +08:00
|
|
|
|
{
|
2024-11-05 09:24:21 +08:00
|
|
|
|
if(bActive && m_pDisplayAreaLayout)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pDisplayAreaLayout->addWidget(m_pDisplayArea);
|
|
|
|
|
|
m_pDisplayArea->show();
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(!bActive && m_pDisplayAreaLayout)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pDisplayAreaLayout->removeWidget(m_pDisplayArea);
|
|
|
|
|
|
m_pDisplayArea->hide();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_pTab->setActive(bActive);
|
2024-10-10 16:59:51 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Dashboard::addPanel(const QString& strType)
|
|
|
|
|
|
{
|
|
|
|
|
|
DataPanel* panel = new DataPanel(m_pDisplayArea);
|
|
|
|
|
|
connect(panel, SIGNAL(sgl_remove(const QString&)), this, SLOT(onSignal_removePanel(const QString&)));
|
|
|
|
|
|
QString strDefaultName = "dataPanel-" + QString::number(m_nPanenlNameNumber);
|
|
|
|
|
|
m_nPanenlNameNumber++;
|
|
|
|
|
|
panel->setName(strDefaultName);
|
|
|
|
|
|
//panel->setStyleSheet("QDialog{background-color:transparent;}");
|
|
|
|
|
|
int nCount = m_dataPanels.count();
|
|
|
|
|
|
//QPoint originPoint = m_pDisplayArea->mapToGlobal(QPoint(0, 0));
|
|
|
|
|
|
int nX = /*originPoint.x() +*/ (m_pDisplayArea->width() - panel->width()) * 0.5 + nCount * 10;
|
|
|
|
|
|
int nY = /*originPoint.y() +*/ (m_pDisplayArea->height() - panel->height()) * 0.5 + nCount * 10;
|
|
|
|
|
|
panel->move(nX, nY);
|
|
|
|
|
|
panel->show();
|
|
|
|
|
|
m_dataPanels.push_back(panel);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Dashboard::removePanel(const QString& strName)
|
|
|
|
|
|
{
|
|
|
|
|
|
int nIndex = -1;
|
|
|
|
|
|
for(int n = 0; n < m_dataPanels.count(); n++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(m_dataPanels.at(n)->getName() == strName)
|
|
|
|
|
|
{
|
|
|
|
|
|
nIndex = n;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(nIndex != -1)
|
|
|
|
|
|
{
|
|
|
|
|
|
DataPanel* panel = m_dataPanels.takeAt(nIndex);
|
|
|
|
|
|
delete panel;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-11-05 09:24:21 +08:00
|
|
|
|
void Dashboard::contextMenu_tab(const QPoint& pos)
|
2024-10-10 16:59:51 +08:00
|
|
|
|
{
|
2024-11-05 09:24:21 +08:00
|
|
|
|
QPoint originPoint = m_pTab->mapToGlobal(QPoint(0, 0));
|
|
|
|
|
|
m_pTabMenu->popup(originPoint + pos);
|
2024-10-10 16:59:51 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Dashboard::onAction_remove()
|
|
|
|
|
|
{
|
|
|
|
|
|
emit sgl_remove();
|
|
|
|
|
|
}
|
|
|
|
|
|
void Dashboard::onAction_rename()
|
|
|
|
|
|
{
|
|
|
|
|
|
emit sgl_rename();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Dashboard::onSignal_removePanel(const QString& strName)
|
|
|
|
|
|
{
|
|
|
|
|
|
removePanel(strName);
|
|
|
|
|
|
}
|