【QT】无边框窗口+背景图片+用户区可拖动

功能截图:

将非用户区边框隐藏,工具栏隐藏,自定义设置背景图片,用户区域可拖动:

这里写图片描述

代码实现:

1、构造函数中的一系列设置:

    setWindowFlags(Qt::Window|Qt::FramelessWindowHint); //设置无边框
    setAttribute(Qt::WA_TranslucentBackground); //设置背景透明
    ui->m_toolBar->setVisible(false);  //将工具栏设置不可见

2、构造函数中对成员变量初始化:

 m_dragging=false;
 m_bgImage.load("C:/Users/Maggie/Downloads/bgd.jpg"); //加载背景图片

3、重写虚函数:

private:
    virtual void paintEvent(QPaintEvent *event);
    virtual void mousePressEvent(QMouseEvent*event);
    virtual void mouseMoveEvent(QMouseEvent*event);
    virtual void mouseReleaseEvent(QMouseEvent*event);

注: *.cpp文件中需要头文件包含:

#include <QPainter>
#include <QMouseEvent>

3.1 设置背景图片:

void MainWindow::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QRect frameRect=rect();
    painter.drawPixmap(frameRect,m_bgImage);
}

3.2 重写三个虚函数,使用户区可拖动:

void MainWindow::mousePressEvent(QMouseEvent*event)
{
    if(event->button()==Qt::LeftButton)
    {
        m_dragging=true;
        m_mousestart=event->globalPos();
        m_framestart=frameGeometry().topLeft();
    }
    //QWidget::mousePressEvent(event);
}
void MainWindow::mouseMoveEvent(QMouseEvent*event)
{
    if(event->buttons()==Qt::LeftButton&&m_dragging)
    {
        QPoint m_mousenow=event->globalPos();
        move(m_framestart+m_mousenow-m_mousestart);
    }
   // QWidget::mouseMoveEvent(event);
}
void MainWindow::mouseReleaseEvent(QMouseEvent*event)
{
    if(event->button()==Qt::LeftButton)
    {
    m_dragging=false;
    }
   // QWidget::mouseReleaseEvent(event);
}

4、私有成员变量:

private:
    QPixmap m_bgImage;
    bool m_dragging;
    QPoint m_mousestart;
    QPoint m_framestart;

猜你喜欢

转载自blog.csdn.net/m0_37557014/article/details/73275298
今日推荐