zoukankan      html  css  js  c++  java
  • QT实现不规则窗体

    看到网上有很多不规则窗体的实现,效果很酷.于是使用QT也实现了一个,QT的不规则窗体实现非常简单,只需要设置一个mask(遮掩)图片,这个图片的格式可以使用png或bmp格式,我使用了png格式,默认窗体是矩形的,使用png图像,将需要隔离在窗体之外的区域的像素设置为白色或透明色,其他颜色的区域对应显示出来的窗体.关键代码就几行.

    #ifndef IRREGULARFORM_H
    #define IRREGULARFORM_H

    #include <QWidget>
    #include "ui_irregularform.h"
    #include <QBitmap>
    #include <QPixmap>
    #include <QMouseEvent>
    #include <QRect>

    class IrregularForm : public QWidget
    {
     Q_OBJECT

    public:
     IrregularForm(QWidget *parent = 0);
     ~IrregularForm();
    protected:
     void  mouseMoveEvent(QMouseEvent *event);
     void  mousePressEvent(QMouseEvent *event); 
     void  mouseReleaseEvent(QMouseEvent *event); 
    private:
     Ui::IrregularFormClass ui;
     QPoint mouseMovePos;
     
    };

    #endif // IRREGULARFORM_H

    #include "irregularform.h"

    IrregularForm::IrregularForm(QWidget *parent)
     : QWidget(parent)
    {
     setWindowFlags(Qt::FramelessWindowHint);
     QPixmap mask(":/IrregularForm/Resources/mask.png");//加载掩码图像
     setMask(QBitmap(mask.mask())); //设置窗体的掩码图像,抠除图像的白色区域实现不规则窗体
     QPalette p;//设置调色板
     p.setBrush(QPalette::Window, QBrush(mask));//将调色板的画刷设置为掩码位图,在不规则窗体上显示出掩码位图
     setPalette(p);
     mouseMovePos = QPoint(0, 0);
    }

    IrregularForm::~IrregularForm()
    {

    }

    void  IrregularForm::mouseMoveEvent(QMouseEvent *event)//鼠标按下并移动则移动不规则窗体
    {
     if(mouseMovePos != QPoint(0, 0))
     {
      move(geometry().x() + event->globalPos().x() - mouseMovePos.x(), geometry().y() + event->globalPos().y() - mouseMovePos.y());
      mouseMovePos = event->globalPos();
     }
    }

    void  IrregularForm::mousePressEvent(QMouseEvent *event)
    {
     mouseMovePos = event->globalPos();
    }

    void  IrregularForm::mouseReleaseEvent(QMouseEvent *event)
    {
     mouseMovePos = QPoint(0, 0);
    }

    效果图

    源码下载地址:http://download.csdn.net/detail/henreash/4393914

    http://blog.csdn.net/henreash/article/details/7618823

  • 相关阅读:
    vue 兼容ie 下载文件
    IDEA maven项目添加自己的jar包依赖
    mongodb 用户权限操作
    springboot + aspect
    Enum枚举类
    线上CPU飙升100%问题排查
    Linux零拷贝技术
    Java线程池实现原理及其在美团业务中的实践
    深入解析String#intern
    Java对象内存布局
  • 原文地址:https://www.cnblogs.com/findumars/p/5290138.html
Copyright © 2011-2022 走看看