您的位置:首页 > 编程语言 > Qt开发

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

2017-06-15 10:22 621 查看

功能截图:

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



代码实现:

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt