QT:实现不规则窗体

实现效果

这里写图片描述

实现过程

不仅仅是圆圈,理论上任何不规则的图形都可以实现出来….

  • 新建一个类继承QWidget
  • 定义以下方法及成员变量,下述方法均要重写
private:
    QPoint dragPosition;
protected:
    void mouseMoveEvent(QMouseEvent *);
    void mousePressEvent(QMouseEvent *);
    void paintEvent(QPaintEvent *);
};
  • 对应的cpp代码
#include "splashscreen.h"
#include <QMouseEvent>
#include <QPainter>
#include <QPixmap>
#include <QBitmap>

SplashScreen::SplashScreen(QWidget *parent) : QWidget(parent)
{
    QPixmap pix;
    pix.load("circle_purple.png",0,Qt::AvoidDither|Qt::ThresholdDither|Qt::ThresholdAlphaDither);//图片路径是build-项目名-Desktop_Qt_5_10_0_MinGW_32bit-Debug
    pix = pix.scaled(width(),height(),Qt::KeepAspectRatio);//缩放到与窗口相同
//    resize(pix.size());
    setMask(QBitmap(pix.mask()));//设置图片遮罩层
}

void SplashScreen::mousePressEvent(QMouseEvent *event){
    if(event->button()==Qt::LeftButton){//判断是否是左键点击
        dragPosition = event->globalPos()-frameGeometry().topLeft();//计算距离
        event->accept();
    }else{
        //do nothing
        close();//关闭窗口
    }
}

void SplashScreen::mouseMoveEvent(QMouseEvent *event){
    if(event->buttons()&Qt::LeftButton){
        move(event->globalPos()-dragPosition);//使窗口移动
        event->accept();
    }
}

void SplashScreen::paintEvent(QPaintEvent *event){
     QPainter painter(this);
     QPixmap pix;
     pix.load("circle_purple.png",0,Qt::AvoidDither|Qt::ThresholdDither|Qt::ThresholdAlphaDither);
     pix = pix.scaled(width(),height(),Qt::KeepAspectRatio);
     painter.drawPixmap(0,0,pix);//重写这个函数是为了完成在窗体上绘制图片的工作。用来确定窗体外形的png图片
}


SplashScreen::~SplashScreen()
{

}

OS:那么如何在QSplashScreen中调用这个窗体呢?..

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值