XSteam/src/sui.cpp

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);
}