您当前的位置: 首页 >  qt

txwtech

暂无认证

  • 2浏览

    0关注

    813博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

QT特殊效果窗体不规则窗体

txwtech 发布时间:2022-09-25 22:46:35 ,浏览量:2

QT中提供部件遮罩mask来实现不规则窗体

启动运行一张图片-可拖动-双击关闭。

 

#ifndef MAINWINDOW8_3_H
#define MAINWINDOW8_3_H

#include 
//by txwtech 2022.9.25
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow8_3; }
QT_END_NAMESPACE

class MainWindow8_3 : public QWidget
{
    Q_OBJECT

public:
    MainWindow8_3(QWidget *parent = nullptr);
    ~MainWindow8_3();

private:
    Ui::MainWindow8_3 *ui;
    QPoint offset2;//用来储存鼠标指针位置与窗口位置的差值

protected:
    void paintEvent(QPaintEvent *event) ;
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void mouseDoubleClickEvent(QMouseEvent *event);

};
#endif // MAINWINDOW8_3_H
#include "mainwindow8_3.h"
#include "ui_mainwindow8_3.h"
#include 
#include 
#include 
#include 

MainWindow8_3::MainWindow8_3(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MainWindow8_3)
{
    ui->setupUi(this);
  //  QPixmap pixmap(":/img/xiongmao2.png");
  //  ui->label->setPixmap(pixmap);
   // ui->label->setMask(pixmap.mask());
    QPixmap pix;
    pix.load(":/img/xiongmao2.png");
    resize(pix.size());
    setMask(pix.mask());

}

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

void MainWindow8_3::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.drawPixmap(0,0,QPixmap(":/img/xiongmao2.png"));
}

void MainWindow8_3::mousePressEvent(QMouseEvent *event)
{
    if(event->button()==Qt::LeftButton)
       {
           //左键按下
           QCursor cursor2a;
           cursor2a.setShape(Qt::ClosedHandCursor);
           QApplication::setOverrideCursor(cursor2a);//是鼠标指针暂时改变形状
           offset2=event->globalPos()-pos();//获取指针位置和窗口位置的差值
       }
    //————————————————
   // 版权声明:本文为CSDN博主「txwtech」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    //原文链接:https://blog.csdn.net/txwtech/article/details/126800415
}

void MainWindow8_3::mouseMoveEvent(QMouseEvent *event)
{
    //鼠标移动事件
       if(event->buttons() & Qt::LeftButton)//这里必须使用buttons(),这里多了一个s,注意与mousePressEvent里面判断左键的区分
       {
           QPoint temp;
           temp=event->globalPos()-offset2;
           move(temp);//使用鼠标指针当前的位置减去差值,就得到了窗口应该移动的位置
       }

  // ————————————————
  // 版权声明:本文为CSDN博主「txwtech」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
       //原文链接:https://blog.csdn.net/txwtech/article/details/126800415
}

void MainWindow8_3::mouseDoubleClickEvent(QMouseEvent *event)
{
    close();
}

关注
打赏
1665060526
查看更多评论
立即登录/注册

微信扫码登录

0.0391s