#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#include <QMouseEvent>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//去掉边框
setWindowFlags(Qt::FramelessWindowHint | windowFlags());
//将背景设为透明
setAttribute(Qt::WA_TranslucentBackground);
}
void Widget::paintEvent(QPaintEvent *event)
{
QPainter p(this);
p.drawPixmap(0,0,350,250,QPixmap("://suns.png"));
}
void Widget::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton)
{
//求坐标差值
p = event->globalPos() - this->frameGeometry().topLeft();
}
else if(event->button() == Qt::RightButton)
{
close(); //关闭窗口
}
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
if(event->button() & Qt::LeftButton)
{
move(event->globalPos() - p);
}
}
Widget::~Widget()
{
delete ui;
}
首先绘图我们还是用到上一次说到的painterevent的绘图事件来实现
那么去掉边框很简单,需要调用上面setwindowsflag,为了保持我们这个窗口原来的属性我们再“与”上这个窗口原本的特性就可以了。那么设置背景透明 就更简单了,setAttribute这个函数就可以实现,再用F1查看一下这个函数的属性,里面有我们想要的背景透明translucentbackground这个属性
剩下的是一个透明窗口之后怎么移动这个窗口的操作,主要是一些坐标的计算