#include "xmainwidget.h" XMainWidget::XMainWidget(QWidget *parent) : QWidget(parent) { initVariable(); initUI(); } XMainWidget::~XMainWidget() { delete m_pTitleBar; delete m_pToolBar; delete m_pLayout; } void XMainWidget::initVariable() { m_mouseMoveWindowFlag = false; m_mouseResizeWindowFlag = false; m_isWindowMax = false; m_skin = ":/skin/default"; m_pLayout = new QVBoxLayout(this); m_pTitleBar = new XTitleBar(this); m_pToolBar = new XToolBar(this); connect(m_pTitleBar,SIGNAL(signalClose()),this,SLOT(slotOnClose())); connect(m_pTitleBar,SIGNAL(signalMin()),this,SLOT(slotOnMin())); connect(m_pTitleBar,SIGNAL(signalMaxRestore()),this,SLOT(slotOnMaxRestore())); } void XMainWidget::initUI() { this->resize(1024,700); this->setWindowFlags(Qt::FramelessWindowHint); this->setMouseTracking(true); this->setLayout(m_pLayout); m_pLayout->addWidget(m_pTitleBar); m_pLayout->addWidget(m_pToolBar); m_pLayout->addStretch(1); m_pLayout->setContentsMargins(BORDER_WIDTH,BORDER_WIDTH,BORDER_WIDTH,BORDER_WIDTH); } void XMainWidget::paintEvent(QPaintEvent *e) { //绘制圆角矩形 QBitmap bitmap(this->size()); QPainter painter(&bitmap); painter.fillRect(bitmap.rect(), Qt::white); painter.setBrush(QColor(0, 0, 0)); painter.drawRoundedRect(QRect(0, 0, this->width(), this->height()), 2, 2); setMask(bitmap); //绘制皮肤 QPainter painter1(this); painter1.drawPixmap(rect(), QPixmap(m_skin)); } void XMainWidget::mouseDoubleClickEvent(QMouseEvent *e) { if (e->button() == Qt::LeftButton && e->y()<= m_pTitleBar->height()) { slotOnMaxRestore(); } } void XMainWidget::mouseMoveEvent(QMouseEvent *e) { //获取鼠标相对于窗体的位置,设置鼠标的形状 if(!m_mouseResizeWindowFlag) { if(!m_isWindowMax) m_eDirection = getMousePos(e->x(),e->y()); else m_eDirection = eNone; } setCursorStyle(m_eDirection); if(e->buttons() == Qt::LeftButton) { //如果是移动窗体位置 if(m_mouseMoveWindowFlag) { if(m_isWindowMax) { slotOnMaxRestore(); } QPoint current_point = this->pos(); current_point.setX(current_point.x() + e->x() - m_mouseSrcPos.x()); current_point.setY(current_point.y() + e->y() - m_mouseSrcPos.y()); this->move(current_point); return ; } //如果是调整窗体大小 if(m_mouseResizeWindowFlag) { setDragSize(e->globalPos(),m_eDirection); m_mouseSrcPos = e->globalPos(); } } } void XMainWidget::mousePressEvent(QMouseEvent *e) { m_mouseMoveWindowFlag = false; m_mouseResizeWindowFlag = false; if (e->button() == Qt::LeftButton) { if(m_eDirection!=eNone) { m_mouseResizeWindowFlag = true; m_mouseSrcPos = e->globalPos(); } else if(e->y()height()+m_pToolBar->height()&&e->y()>BORDER_WIDTH) { m_mouseMoveWindowFlag = true; m_mouseSrcPos = e->pos(); } } } void XMainWidget::mouseReleaseEvent(QMouseEvent *e) { m_mouseMoveWindowFlag = false; m_mouseResizeWindowFlag = false; } void XMainWidget::slotOnMaxRestore() { if(!m_isWindowMax) { m_rectRestoreWindow = geometry(); setGeometry(qApp->desktop()->availableGeometry()); m_isWindowMax = true; } else { setGeometry(m_rectRestoreWindow); m_isWindowMax = false; } } void XMainWidget::slotOnMin() { setWindowState(Qt::WindowMinimized); } void XMainWidget::slotOnClose() { close(); } void XMainWidget::setCursorStyle(enum_Direction direction) { //设置上下左右以及右上、右下、左上、坐下的鼠标形状 switch(direction) { case eTop: case eBottom: setCursor(Qt::SizeVerCursor); break; case eRight: case eLeft: setCursor(Qt::SizeHorCursor); break; case eTopRight: case eBottomLeft: setCursor(Qt::SizeBDiagCursor); break; case eRightBottom: case eLeftTop: setCursor(Qt::SizeFDiagCursor); break; default: setCursor(Qt::ArrowCursor); break; } } //确定点的位置方向 XMainWidget::enum_Direction XMainWidget::getMousePos(int nXRelative,int nYRelative) { int nTop = qAbs(nYRelative)