Qt工作笔记-QMainWindow自定义窗体中利用状态栏进行窗体放缩

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq78442761/article/details/86534881

目录

 

原理

关键代码


原理

在QDialog和QWidget中一般使用重写:

    void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
    void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
    void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;

这3个函数就可以自定义窗口的放大的和缩小!

这里不要忘记设置

setMouseTracking(true);

这个属性!

在QMainWindow中,可以利用状态栏的特点,进行放大和缩小!

扫描二维码关注公众号,回复: 4965084 查看本文章

原理是,状态栏存在这样的一个东西,可以对窗口进行设置:

下面那个小三角形,即可完成窗体放缩!

这里可以重写

void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;

让其更加的明显!

截图如下:

程序运行截图如下:

关键代码

关键源码如下:

变量:

    bool m_isDragging;
    QPoint m_startPosition;
    QPoint m_framePosition;

参数初始化:

m_isDragging = false;

cpp文件:

void MainWindow::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setBrush(QBrush(Qt::white));
    painter.setPen(Qt::black);
    QRect rect = this->rect();
    rect.setWidth(rect.width() - 1);
    rect.setHeight(rect.height() - 1);
    painter.drawRoundedRect(rect, 30, 30);

    painter.setPen(Qt::red);
    painter.drawPixmap(rect.width() - LABLESIZE16, rect.height() - LABLESIZE16
                       , QPixmap(":/img/dot_blue.png").scaled(LABLESIZE16, LABLESIZE16));

    QMainWindow::paintEvent(event);
}

void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
    if(event->buttons() & Qt::LeftButton){

        if(m_isDragging){

            QPoint delta = event->globalPos() - m_startPosition;
            move(m_framePosition + delta);
        }
    }

    QMainWindow::mouseMoveEvent(event);
}

void MainWindow::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton){

        m_isDragging = true;
        m_startPosition = event->globalPos();
        m_framePosition = frameGeometry().topLeft();
    }

    QMainWindow::mousePressEvent(event);
}

void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
    m_isDragging = false;
    QMainWindow::mouseReleaseEvent(event);
}

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/86534881