#include "topwidget.h"
#include <QGridLayout>
#include <QDebug>
#include <QMouseEvent>
#pragma execution_character_set("utf-8")
TopWidget::TopWidget(QWidget *parent ) : QWidget(parent)
{
//初始化界面
this->resize(1200, 25);
m_parent = parent;
m_titleLabel = new QLabel(this);
m_minButton = new QToolButton(this);
m_maxButton = new QToolButton(this);
m_closeButton = new QToolButton(this);
m_minButton->setText("min");
m_maxButton->setText("max");
m_closeButton->setText("close");
m_titleLabel->setText("检码参数界面");
//获取最小化、关闭按钮图标
QPixmap minPix = style()->standardPixmap(QStyle::SP_TitleBarMinButton);
QPixmap maxPix = style()->standardPixmap(QStyle::SP_TitleBarMaxButton);
QPixmap closePix = style()->standardPixmap(QStyle::SP_TitleBarCloseButton);
//设置图标
m_minButton->setIcon(minPix);
m_maxButton->setIcon(maxPix);
m_closeButton->setIcon(closePix);
//设置鼠标移至按钮上的提示信息
m_minButton->setToolTip(tr("最小化"));
m_closeButton->setToolTip(tr("关闭"));
m_maxButton->setToolTip(tr("最大化"));
//设置最小化、关闭按钮的样式
this->setStyleSheet("background-color:white;");
m_minButton->setStyleSheet("QToolButton{background-color:transparent}"
"QToolButton:hover{background-color:rgba(0,197,205,100)}"
"QToolButton:pressed{background-color:rgba(0,134,139,100)}");
m_maxButton->setStyleSheet("QToolButton{background-color:transparent}"
"QToolButton:hover{background-color:rgba(0,197,205,100)}"
"QToolButton:pressed{background-color:rgba(0,134,139,100)}");
m_closeButton->setStyleSheet("QToolButton{background-color:transparent}"
"QToolButton:hover{background-color:rgba(0,197,205,100)}"
"QToolButton:pressed{background-color:rgba(0,134,139,100)}");
//布局
QGridLayout *mainLayout = new QGridLayout;
mainLayout->addWidget(m_titleLabel, 0, 0, 1, 15);
mainLayout->addWidget(m_minButton, 0, 15);
mainLayout->addWidget(m_maxButton, 0, 16);
mainLayout->addWidget(m_closeButton, 0, 17);
this->setLayout(mainLayout);
this->setMouseTracking(true);
m_bLeftBtnClk = false;
//关联信号槽
connect(m_closeButton, &QToolButton::clicked, this, &TopWidget::WindowClosed);
connect(m_minButton, &QToolButton::clicked, this, &TopWidget::WindowMin);
connect(m_maxButton, &QToolButton::clicked, this, &TopWidget::WindowMax);
}
void TopWidget::SetParentWidget(QWidget *parent)
{
m_parent = parent;
this->setParent(this);
}
void TopWidget::WindowClosed()
{
m_parent->close();
}
void TopWidget::WindowMin()
{
m_parent->showMinimized();
}
void TopWidget::WindowMax()
{
//m_parent->showMaximized();
m_parent->showNormal();
}
void TopWidget::SetTitle(QString *title, QPixmap *pix)
{
m_titleLabel->setText(*title);
m_titleLabel->setPixmap(*pix);
}
void TopWidget::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton)
{
m_Press = event->globalPos();
m_bLeftBtnClk = true;
}
event->ignore();//表示继续向下传递事件,其他的控件还可以去获取
}
void TopWidget::mouseReleaseEvent(QMouseEvent *event)
{
if( event->button() == Qt::LeftButton )
{
m_bLeftBtnClk = false;
}
event->ignore();
}
void TopWidget::mouseMoveEvent(QMouseEvent *event)
{
if( m_bLeftBtnClk ){
m_Move = event->globalPos();
m_parent->move(m_parent->pos() + m_Move - m_Press);
m_Press = m_Move;
}
event->ignore();
}
```cpp
应用端
//参数界面布局
m_gridLayout->addWidget(m_leftWidget, 0, 0, 10, 1);
m_gridLayout->addWidget(m_midWidget, 0, 1, 10, 1);
m_gridLayout->addWidget(m_rightWidget, 0, 2, 10, 1);
m_gridLayout->addWidget(m_lbottomWidget, 10, 0, 2, 2);
m_gridLayout->addWidget(m_rbottomWidget, 10, 2, 2, 1);
m_mainWidget->setLayout(m_gridLayout);
//界面整体布局
m_mainLayout->addWidget(m_topWidget, 0, 0, 2, 1);
m_mainLayout->addWidget(m_mainWidget, 2, 0, 12, 1);
m_mainLayout->setMargin(0);
this->setLayout(m_mainLayout);
//隐藏自身标题栏
this->setWindowFlags(Qt::FramelessWindowHint);