无边框得窗口鼠标拖四边放大缩小

mac2024-04-18  40

/*头文件*/

/*该部分代码,只是实现了拖放四边,放大缩小窗口,*/

class myWidget : public QWidget {     typedef enum     {         REPORT_SIDES_MARK_MIN = -1,         REPORT_SDIES_MARK_TOP,         REPORT_SDIES_MARK_LEFT,         REPORT_SDIES_MARK_RIGHT,         REPORT_SDIES_MARK_BOTTOM,         REPORT_SDIES_MARK_MAX

    }REPORT_SIDES_MARK_ENUM;     Q_OBJECT public:     myWidget(QWidget *parent = Q_NULLPTR);     ~myWidget();

protected:     void mouseMoveEvent(QMouseEvent *);     void mousePressEvent(QMouseEvent *);     void resizeEvent(QResizeEvent *);

private:     REPORT_SIDES_MARK_ENUM  m_sidesMark; };

 

/*实现部分代码*/

myWidget::myWidget(QWidget *parent)     : QWidget(parent)     , m_sidesMark(REPORT_SIDES_MARK_MIN) {     this->setMouseTracking(true);     this->setFocusPolicy(Qt::StrongFocus);     this->setStyleSheet("background-color:rgb(0,0,0)");     this->setWindowFlags(Qt::FramelessWindowHint); }

myWidget::~myWidget() {

}

void myWidget::mouseMoveEvent(QMouseEvent *event) {     if (0 < event->pos().x() && event->pos().x() < 10)     {         this->setCursor(Qt::SizeHorCursor);     }     else if (0 < event->pos().y() && event->pos().y() < 10)     {         this->setCursor(Qt::SizeVerCursor);     }     else if (this->height() - 10 < event->pos().y() && event->pos().y() < this->height())     {         this->setCursor(Qt::SizeVerCursor);     }     else if (this->width() - 10 < event->pos().x() && event->pos().x() < this->width())     {         this->setCursor(Qt::SizeHorCursor);     }     else     {         this->setCursor(Qt::SizeAllCursor);     }

    if (event->buttons() & Qt::LeftButton)     {         if (m_sidesMark == REPORT_SDIES_MARK_TOP)  /*顶*/         {             QRect rect = this->geometry();             rect.setTop(this->mapToParent(event->pos()).y());             this->setGeometry(rect);         }         else if (m_sidesMark == REPORT_SDIES_MARK_RIGHT)/*右*/         {             QRect rect = this->geometry();             rect.setRight(this->mapToParent(event->pos()).x());             this->setGeometry(rect);

        }         else if (m_sidesMark == REPORT_SDIES_MARK_LEFT) /*左*/         {             QRect rect = this->geometry();             rect.setLeft(this->mapToParent(event->pos()).x());             this->setGeometry(rect);         }         else if (m_sidesMark == REPORT_SDIES_MARK_BOTTOM) /*底*/         {             QRect rect = this->geometry();             rect.setBottom(this->mapToParent(event->pos()).y());             this->setGeometry(rect);         }     }     QWidget::mouseMoveEvent(event); }

void myWidget::mousePressEvent(QMouseEvent *event) {     if (event->button() == Qt::LeftButton)     {         if (0 < event->pos().x() && event->pos().x() < 10) /*左*/         {             m_mouseLeftClick = true;             m_sidesMark = REPORT_SDIES_MARK_LEFT;         }         else if (0 < event->pos().y() && event->pos().y() < 10) /*顶*/         {             m_mouseLeftClick = true;             m_sidesMark = REPORT_SDIES_MARK_TOP;         }         else if (this->height() - 10 < event->pos().y() && event->pos().y() < this->height())  /*下*/         {             m_mouseLeftClick = true;             m_sidesMark = REPORT_SDIES_MARK_BOTTOM;         }         else if (this->width() - 10 < event->pos().x() && event->pos().x() < this->width())  /*右*/         {             m_mouseLeftClick = true;             m_sidesMark = REPORT_SDIES_MARK_RIGHT;         }     }

    QWidget::mousePressEvent(event); }

void myWidget::resizeEvent(QResizeEvent *event) {

    QWidget::resizeEvent(event); }

最新回复(0)