mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLabel>
#include <QMouseEvent>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
//重载基类的鼠标按下事件处理函数
virtual void mousePressEvent(QMouseEvent *event);
//重载基类的鼠标释放事件处理函数
virtual void mouseReleaseEvent(QMouseEvent *event);
//重载基类的鼠标移动事件处理函数
virtual void mouseMoveEvent(QMouseEvent *event);
private:
Ui::MainWindow *ui;
QLabel *m_pObjBg; //对话框背景图片
QPoint move_point; //鼠标按下位置
bool mouse_press; //鼠标是否按下的标识
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
//ui->setupUi(this);
//设置界面背景透明
QPalette palette = this->palette();
palette.setBrush(QPalette::Window, QBrush(Qt::NoButton)); //透明画刷
setPalette(palette); //设置当前对话框的调色板
setAutoFillBackground(true); //自动填充背景颜色
setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog | Qt::WindowStaysOnTopHint); //屏幕边框消失,窗体位于最前方
setAttribute(Qt::WA_TranslucentBackground); //窗体透明
//背景标签
m_pObjBg = new QLabel(this);
QPixmap pmpBg(":/bg3.png");
m_pObjBg->setFixedSize(pmpBg.width(), pmpBg.height()); //设置背景标签的大小和背景图标大小一致
this->setFixedSize(pmpBg.width(), pmpBg.height());
//设置背景标签样式表
m_pObjBg->setStyleSheet("QLabel {background-image: url(:/bg3.png);}");
m_pObjBg->move(0, 0);
m_pObjBg->setVisible(true);
}
MainWindow::~MainWindow()
{
delete ui;
}
//重载基类的鼠标按下事件处理函数
void MainWindow:: mousePressEvent(QMouseEvent *event)
{
//只能是鼠标左键移动
if(event->button() == Qt::LeftButton)
{
mouse_press = true;
}
/*
* 窗口移动距离
* globalPose(), 以桌面左上角为原点,绝对坐标
* pos(), 窗体左上角(不含边框)的坐标,只要鼠标在窗体内,且窗体不动,坐标不变
*/
move_point = event->globalPos() - pos();
}
//重载基类的鼠标释放事件处理函数
void MainWindow:: mouseReleaseEvent(QMouseEvent *event)
{
mouse_press = false;
}
//重载基类的鼠标移动事件处理函数
void MainWindow:: mouseMoveEvent(QMouseEvent *event)
{
//移动窗口
if(mouse_press)
{
/*
* event->globalPos() - move_point
* =event->globalPos() - (event->globalPos0() - pos0())
* =pos() + (event->globalPos() - event->globalPos0())
*/
move(event->globalPos() - move_point);
}
}
运行结果: