opencv_mv/QMainPro/QMacVisual/headwidget.cpp

175 lines
5.0 KiB
C++

#include "headwidget.h"
#include <QLabel>
#include <QPushButton>
#include <QPixmap>
#include <QHBoxLayout>
#include <QMouseEvent>
#include "frmQuit.h"
#include "datavar.h"
HeadWidget::HeadWidget(QWidget *parent) : QWidget(parent)
{
this->setAttribute(Qt::WA_StyledBackground);
m_pLogo = new QLabel(this);
m_pLogo->setObjectName("pLogo");
m_pLogo->setFixedSize(24, 24);
m_pName = new QLabel(this);
m_pName->setObjectName("pName");
m_pName->setStyleSheet("color:white; font-size:18px");
m_pInfo = new QLabel(this);
m_pInfo->setObjectName("pInfo");
m_pInfo->setStyleSheet("color:white; font-size:18px");
m_pInfo->setAlignment(Qt::AlignCenter);
//按钮样式
QString btnStyle(
"QWidget{"
"border: none;"
"}"
"QPushButton:hover{"
"background-color: rgba(243, 235, 197,45);"
"}"
"QPushButton:pressed{"
"background-color: rgba(243, 235, 197,45);"
"}"
);
auto *pBtnXXX = new QPushButton("", this);
pBtnXXX->setIconSize(QSize(16, 16));
pBtnXXX->setIcon(QIcon(":/Bitmaps/menu.png"));
pBtnXXX->setToolTip("标题颜色");
pBtnXXX->setStyleSheet(btnStyle);
auto *pBtnMin = new QPushButton("", this);
pBtnMin->setIconSize(QSize(16, 16));
pBtnMin->setIcon(QIcon(":/Bitmaps/minimize.png"));
pBtnMin->setToolTip("最小化");
pBtnMin->setStyleSheet(btnStyle);
pBtnMax = new QPushButton("", this);
pBtnMax->setIconSize(QSize(16, 16));
pBtnMax->setIcon(QIcon(":/Bitmaps/restore.png"));
pBtnMax->setToolTip("向下还原");
pBtnMax->setStyleSheet(btnStyle);
auto *pBtnCls = new QPushButton("", this);
pBtnCls->setIconSize(QSize(16, 16));
pBtnCls->setIcon(QIcon(":/Bitmaps/menu_close.png"));
pBtnCls->setToolTip("关闭");
pBtnCls->setStyleSheet(btnStyle);
QFont font;
//字体加粗
font.setBold(true);
pBtnXXX->setFixedSize(36, 36);
pBtnXXX->setFont(font);
pBtnMin->setFixedSize(36, 36);
pBtnMin->setFont(font);
pBtnMax->setFixedSize(36, 36);
pBtnMax->setFont(font);
pBtnCls->setFixedSize(36, 36);
pBtnCls->setFont(font);
auto *hlay = new QHBoxLayout(this);
hlay->setContentsMargins(3,0,4,2);
hlay->setSpacing(2);
hlay->addWidget(m_pLogo);
hlay->addWidget(m_pName);
hlay->addSpacing(20);
hlay->addWidget(m_pInfo, 1);
hlay->addSpacing(20);
hlay->addWidget(pBtnXXX);
hlay->addWidget(pBtnMin);
hlay->addWidget(pBtnMax);
hlay->addWidget(pBtnCls);
connect(pBtnMin, &QPushButton::clicked, this, &HeadWidget::sigMinimized);
connect(pBtnMax, &QPushButton::clicked, this, &HeadWidget::sigToggleMaximized);
connect(pBtnMax, &QPushButton::clicked, this, &HeadWidget::min_maxState);
connect(pBtnCls, &QPushButton::clicked, this, &HeadWidget::sigClose);
connect(pBtnXXX, &QPushButton::clicked, this, [this, pBtnXXX](){
auto pos = this->mapToGlobal(pBtnXXX->pos());
pos += QPoint(0, pBtnXXX->height() + 2);
emit sigColor(pos);
});
}
void HeadWidget::shot_Quit()
{
//保存画面
frmQuit* fQuit = new frmQuit();
fQuit->showNormal();
}
void HeadWidget::min_maxState()
{
if (dataVar::form_max_state == false)
{
pBtnMax->setIcon(QIcon(":/Bitmaps/restore.png"));
pBtnMax->setToolTip("向下还原");
dataVar::form_max_state = true;
}
else
{
pBtnMax->setIcon(QIcon(":/Bitmaps/maximize.png"));
pBtnMax->setToolTip("最大化");
dataVar::form_max_state = false;
}
}
void HeadWidget::setLogo(const QString &imgFile, const QString &name)
{
m_pLogo->clear();
if(!imgFile.isEmpty())
{
QPixmap pic(imgFile);
if (!pic.isNull())
{
m_pLogo->setPixmap(pic);
}
}
m_pName->setText(name);
m_pName->adjustSize();
}
void HeadWidget::setTitle(const QString &info)
{
m_pInfo->setText(info);
}
void HeadWidget::setBgColor(const QString &color)
{
this->setStyleSheet(QString("HeadWidget{background:%1}").arg(color));
}
void HeadWidget::mousePressEvent(QMouseEvent *e)
{
e->accept();
m_bPressed = true;
m_pressedWidgetPos = this->parentWidget()->pos();
m_pressedMousePos = e->globalPos();
}
void HeadWidget::mouseMoveEvent(QMouseEvent *e)
{
e->accept();
if(m_bEnabelMove && m_bPressed)
{
QPoint pos = m_pressedWidgetPos + e->globalPos() - m_pressedMousePos;
//此处用的parent widget来移动
//如果进行了嵌套, 需要自己写个函数, 把需要移动的widget传递进来替换到这里,
//mousePressEvent里面也需要进行对应的替换
if (pos.x() != 0 || pos.y() != 0)
{
this->parentWidget()->move(pos);
m_bMouseIsMove = true;
}
}
}
void HeadWidget::mouseReleaseEvent(QMouseEvent *e)
{
e->accept();
m_bPressed = false;
if (dataVar::form_max_state == true && m_bMouseIsMove == true)
{
//发送两次信号到Normal状态
emit sigToggleMaximized();
emit sigToggleMaximized();
min_maxState();
}
m_bMouseIsMove = false;
}