128 lines
3.5 KiB
C++
128 lines
3.5 KiB
C++
#include "sui.h"
|
|
sui::sui(QDialog *parent)
|
|
: QDialog(parent),
|
|
m_widget(new QDialog),
|
|
m_layout(new QVBoxLayout),
|
|
m_press(false),
|
|
m_border_width(5)
|
|
{
|
|
|
|
init_layout();
|
|
}
|
|
sui::~sui()
|
|
{
|
|
|
|
}
|
|
void sui::init_layout()
|
|
{
|
|
m_title=new sui_title(this);
|
|
m_title->set_title(tr("XSteam"));
|
|
setObjectName(tr("m_widget"));
|
|
m_layout->addWidget(m_title);
|
|
m_title->setMouseTracking(true);
|
|
m_layout->setContentsMargins(5, 5, 5, 5);
|
|
m_layout->setSpacing(0);
|
|
setWindowFlags(Qt::FramelessWindowHint);
|
|
setAttribute(Qt::WA_TranslucentBackground);
|
|
setMouseTracking(true);
|
|
setBaseSize(800, 600);
|
|
resize(800, 600);
|
|
setLayout(m_layout);
|
|
connect(m_title, SIGNAL(signals_close()), this, SLOT(slots_close()));
|
|
}
|
|
void sui::slots_close(){
|
|
this->close();
|
|
}
|
|
void sui::showEvent(QShowEvent *event)
|
|
{
|
|
this->setAttribute(Qt::WA_Mapped);
|
|
QWidget::showEvent(event);
|
|
}
|
|
|
|
void sui::paintEvent(QPaintEvent *event)
|
|
{
|
|
QStyleOption opt;
|
|
opt.initFrom(this);
|
|
QPainter painter(this);
|
|
style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
|
|
painter.setRenderHint(QPainter::Antialiasing);
|
|
painter.drawRoundedRect(this->rect(), 10, 10);
|
|
QWidget::paintEvent(event);
|
|
}
|
|
|
|
void sui::mousePressEvent(QMouseEvent *event)
|
|
{
|
|
if ((event->button() == Qt::LeftButton))
|
|
{
|
|
m_press = true;
|
|
m_point = (event->globalPosition() - this->pos()).toPoint();
|
|
event->accept();
|
|
}
|
|
}
|
|
|
|
void sui::mouseMoveEvent(QMouseEvent *event)
|
|
{
|
|
if (m_press)
|
|
{
|
|
move(event->globalPosition().toPoint() - m_point);
|
|
event->accept();
|
|
}
|
|
}
|
|
|
|
void sui::mouseReleaseEvent(QMouseEvent *event)
|
|
{
|
|
Q_UNUSED(event)
|
|
m_press = false;
|
|
}
|
|
|
|
bool sui::nativeEvent(const QByteArray &eventType, void *message, qintptr *result)
|
|
{
|
|
//Q_UNUSED(eventType)
|
|
|
|
MSG *param = static_cast<MSG *>(message);
|
|
|
|
switch (param->message)
|
|
{
|
|
case WM_NCHITTEST:
|
|
{
|
|
int nX = GET_X_LPARAM(param->lParam) - this->geometry().x();
|
|
int nY = GET_Y_LPARAM(param->lParam) - this->geometry().y();
|
|
|
|
// 如果鼠标位于子控件上,则不进行处理
|
|
if (childAt(nX, nY) != nullptr)
|
|
return QWidget::nativeEvent(eventType, message, result);
|
|
|
|
*result = HTCAPTION;
|
|
|
|
// 鼠标区域位于窗体边框,进行缩放
|
|
if ((nX > 0) && (nX < m_border_width))
|
|
*result = HTLEFT;
|
|
|
|
if ((nX > this->width() - m_border_width) && (nX < this->width()))
|
|
*result = HTRIGHT;
|
|
|
|
if ((nY > 0) && (nY < m_border_width))
|
|
*result = HTTOP;
|
|
|
|
if ((nY > this->height() - m_border_width) && (nY < this->height()))
|
|
*result = HTBOTTOM;
|
|
|
|
if ((nX > 0) && (nX < m_border_width) && (nY > 0) && (nY < m_border_width))
|
|
*result = HTTOPLEFT;
|
|
|
|
if ((nX > this->width() - m_border_width) && (nX < this->width()) && (nY > 0) && (nY < m_border_width))
|
|
*result = HTTOPRIGHT;
|
|
|
|
if ((nX > 0) && (nX < m_border_width) && (nY > this->height() - m_border_width) && (nY < this->height()))
|
|
*result = HTBOTTOMLEFT;
|
|
|
|
if ((nX > this->width() - m_border_width) && (nX < this->width()) && (nY > this->height() - m_border_width) && (nY < this->height()))
|
|
*result = HTBOTTOMRIGHT;
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return QWidget::nativeEvent(eventType, message, result);
|
|
}
|