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