Qt 不规则窗口

项目工程目录:

 

mywidget.h:

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>

namespace Ui {
class MyWidget;
}

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    explicit MyWidget(QWidget *parent = 0);
    ~MyWidget();
protected:
    void paintEvent(QPaintEvent *event);//重写绘图事件

    void mouseMoveEvent(QMouseEvent *event);//重写鼠标移动事件

    void mousePressEvent(QMouseEvent *event);//重写鼠标按下事件,目的是为了求取按下的坐标点

private:
    Ui::MyWidget *ui;

    QPoint p;//这里为了求取坐标添加一个点
};

#endif // MYWIDGET_H

 

 

 mywidget.cpp:

#include "mywidget.h"
#include "ui_mywidget.h"

#include <QPainter>
#include <QMouseEvent>

MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    //去窗口边框
    setWindowFlags(Qt::FramelessWindowHint | windowFlags());//windowFlags()获取原来的标记,在原来的基础上添加了去边框Qt::FramelessWindowHint
    //将窗口背景颜色设置为透明
    setAttribute(Qt::WA_TranslucentBackground);

    /*
     * 经过上面的设置,可以出现不规则的窗口,但是发现没有办法按照点击鼠标移动,所以这里就需要重写鼠标事件
    */




}

MyWidget::~MyWidget()
{
    delete ui;
}

void MyWidget::paintEvent(QPaintEvent *event)
{
    //这里仅仅是窗口添加图片
    QPainter p(this);
    p.drawPixmap(0,0,QPixmap(":/res/2.png"));

}



void MyWidget::mouseMoveEvent(QMouseEvent *event)
{
    if (event->buttons() & Qt::LeftButton)
    {
        move(event->globalPos() -p);
    }

}


void MyWidget::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::RightButton)
    {
        //关闭窗口
        close();
    }
    else if (event->button() == Qt::LeftButton)
    {
        //求坐标差值
        //当前点击坐标 - 窗口左上角坐标
        p = event->globalPos() - this->frameGeometry().topLeft();

    }
}

 

转载于:https://www.cnblogs.com/doker/p/11141559.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值