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

Qt---自定义对话框形状、移动窗体

2016-08-22 22:55 447 查看
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);
}
}


运行结果:

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