无边框窗口,拖着四边移动,四角放大缩小

mac2024-05-20  38

/*四角10个像素可以放大缩小,边框10像素可以移动*/

class myWidget : public QWidget {     typedef enum     {         REPORT_SIDES_MARK_MIN = -1,         REPORT_SDIES_MARK_LEFT_UP,         REPORT_SDIES_MARK_LEFT_DOWN,         REPORT_SDIES_MARK_RIGHT_UP,         REPORT_SDIES_MARK_RIGHT_DOWN,         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;     bool                    m_mouseLeftClick;     QTextEdit                *m_text;

    QPoint                    m_point;     QPoint                    m_pos; };

/*具体实现*/

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);     this->resize(220, 220);

    m_text = new QTextEdit(this);     m_text->resize(200, 200);     m_text->move(10, 10);     m_text->setContentsMargins(10,10,10,10); }

myWidget::~myWidget() {

}

void myWidget::mouseMoveEvent(QMouseEvent *event) {     if (0 < event->pos().x() && event->pos().x() < 10 && 0 < event->pos().y() && event->pos().y() < 10         || this->width() - 10 < event->pos().x() && event->pos().x() < this->width() && this->height() - 10 < event->pos().y() && event->pos().y() < this->height())  //左上角     {         this->setCursor(Qt::SizeFDiagCursor);     }     else if(this->height() - 10 < event->pos().y() && event->pos().y() < this->height() && 0 < event->pos().x() && event->pos().x() < 10         || this->width() - 10 < event->pos().x() && event->pos().x() < this->width() && 0 < event->pos().y() && event->pos().y() < 10)  //左下角     {         this->setCursor(Qt::SizeBDiagCursor);     }     else if (10 < event->pos().x() && event->pos().x() < this->width() - 10 && 0 < event->pos().y() && event->pos().y() < 10          || 10 < event->pos().y() && event->pos().y() < this->height() - 10 && 0 < event->pos().x() && event->pos().x() < 10         || 10 < event->pos().y() && event->pos().y() < this->height() - 10 && this->width() - 10 < event->pos().x() && event->pos().x() < this->width()         || 10 < event->pos().x() && event->pos().x() < this->width() - 10 && this->height() - 10 < event->pos().y() && event->pos().y() < this->height()) //上     {         this->setCursor(Qt::SizeAllCursor);     }

    if (event->buttons() & Qt::LeftButton)     {         if (m_mouseLeftClick == false)         {             //移动中的鼠标位置相对于初始位置的相对位置.             QPoint relativePos = event->globalPos() - m_point;             //然后移动窗体即可.             this->move(m_pos + relativePos);         }         else         {             if (m_sidesMark == REPORT_SDIES_MARK_LEFT_UP)  /*顶*/             {                 QRect rect = this->geometry();                 rect.setTop(this->mapToParent(event->pos()).y());                 rect.setLeft(this->mapToParent(event->pos()).x());                 this->setGeometry(rect);             }             else if (m_sidesMark == REPORT_SDIES_MARK_RIGHT_UP)/*右*/             {                 QRect rect = this->geometry();                 rect.setRight(this->mapToParent(event->pos()).x());                 rect.setTop(this->mapToParent(event->pos()).y());                 this->setGeometry(rect);

            }             else if (m_sidesMark == REPORT_SDIES_MARK_LEFT_DOWN) /*左*/             {                 QRect rect = this->geometry();                 rect.setLeft(this->mapToParent(event->pos()).x());                 rect.setBottom(this->mapToParent(event->pos()).y());                 this->setGeometry(rect);             }             else if (m_sidesMark == REPORT_SDIES_MARK_RIGHT_DOWN) /*底*/             {                 QRect rect = this->geometry();                 rect.setBottom(this->mapToParent(event->pos()).y());                 rect.setRight(this->mapToParent(event->pos()).x());                 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 && 0 < event->pos().y() && event->pos().y() < 10)         {             m_mouseLeftClick = true;             m_sidesMark = REPORT_SDIES_MARK_LEFT_UP;         }         else if(this->width() - 10 < event->pos().x() && event->pos().x() < this->width() && this->height() - 10 < event->pos().y() && event->pos().y() < this->height())  //左上角         {             m_mouseLeftClick = true;             m_sidesMark = REPORT_SDIES_MARK_RIGHT_DOWN;         }         else if (this->height() - 10 < event->pos().y() && event->pos().y() < this->height() && 0 < event->pos().x() && event->pos().x() < 10)         {             m_mouseLeftClick = true;             m_sidesMark = REPORT_SDIES_MARK_LEFT_DOWN;         }         else if(this->width() - 10 < event->pos().x() && event->pos().x() < this->width() && 0 < event->pos().y() && event->pos().y() < 10)  //左下角         {             m_mouseLeftClick = true;             m_sidesMark = REPORT_SDIES_MARK_RIGHT_UP;         }         else if (10 < event->pos().x() && event->pos().x() < this->width() - 10 && 0 < event->pos().y() && event->pos().y() < 10             || 10 < event->pos().y() && event->pos().y() < this->height() - 10 && 0 < event->pos().x() && event->pos().x() < 10             || 10 < event->pos().y() && event->pos().y() < this->height() - 10 && this->width() - 10 < event->pos().x() && event->pos().x() < this->width()             || 10 < event->pos().x() && event->pos().x() < this->width() - 10 && this->height() - 10 < event->pos().y() && event->pos().y() < this->height()) //         {             //记录鼠标的世界坐标.             m_point = event->globalPos();             //记录窗体的世界坐标.             m_pos = this->frameGeometry().topLeft();             m_mouseLeftClick = false;         }     }

    QWidget::mousePressEvent(event); }

void myWidget::resizeEvent(QResizeEvent *event) {     m_text->resize(this->width() - 20, this->height() - 20);

    QWidget::resizeEvent(event); }

最新回复(0)