QT中创建透明或者异形的Window

1.main.cpp中 打开窗体的那里添加

      w.setAttribute(Qt::WA_TranslucentBackground);

 

这样就不会有百边了

 

然后,假如是MainWindow

头文件里面添加:

 

 

 

protected:

    void paintEvent(QPaintEvent *event);

 

    void mousePressEvent(QMouseEvent *event);

 

    void mouseMoveEvent(QMouseEvent *event);

 

private:

 

    Ui::MainWindow *ui;

 

    QPoint dPos;

 

    QPoint windowPos;

 

    QPoint mousePos;

 

 

cpp文件中:

 

初始化中:

      QPixmap pix;

    pix.load(":/new/prefix1/image/login.png",0,Qt::AvoidDither|Qt::ThresholdDither|Qt::ThresholdAlphaDither);

 

    resize(pix.size());

 

    setMask(QBitmap(pix.mask()));
 
 
然后是下面的:
 
//需要引入#include "QtGui"
void MainWindow::paintEvent(QPaintEvent *event)
{
   QPainter painter(this);
   painter.drawPixmap(0,0,QPixmap(":/new/prefix1/image/login.png"));
//   painter.drawPixmap(0,0,width(),height(),QPixmap(":/new/prefix1/image/login.png"));
//   event->accept();
//   qDebug()<<"set back ground image";
}
 
 
 
 
 
 
 
 
 
 
 
 
   
 
 
 
//#region
//移动窗体
//QPoint dPos;
//QPoint windowPos;
//QPoint mousePos;
 
//w.setWindowOpacity(1);
//w.setWindowFlags(Qt::FramelessWindowHint);
//w.setAttribute(Qt::WA_TranslucentBackground);
 
void MainWindow::mousePressEvent(QMouseEvent *event){
    this->windowPos = this->pos();
    this->mousePos = event->globalPos();
    this->dPos = mousePos - windowPos;
}
void MainWindow::mouseMoveEvent(QMouseEvent *event){
    this->move(event->globalPos()-dPos);
}

 

这样做出来的异形窗体,你去任务栏里面点一下看看。。。

 

 很多网络教程不是使用setMask的,你去任务栏点击看看,不起作用!

 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值