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();

    }
}

 

posted @ 2019-07-06 09:04  Mr_Song_D  阅读(929)  评论(0编辑  收藏  举报