异形窗体即不规则窗体,一般采用png图片,一般绘制异形窗体分两步:

1、设置遮罩区
2、绘制图片

 

使用png图片的透明部分作为遮罩区,然后绘制图片,这样我们就看到一个只绘制了非透明部分的图形,废话少说,以实现绘制一只蝴蝶(蝴蝶为半透明)为例,效果如下:

头文件:

  1: #include <QWidget>
  2: class TransDialog : public QWidget
  3: {
  4:     Q_OBJECT
  5: public:
  6:     explicit TransDialog(QWidget *parent = 0);
  7:     void paintEvent(QPaintEvent *event) ;
  8: private:
  9:     QPixmap m_Pixmap;
 10: };
 11: 

cpp文件:

  1: #include "transdialog.h"
  2: #include <QBitmap>
  3: #include <QPalette>
  4: #include <QPaintEvent>
  5:
  6: TransDialog::TransDialog(QWidget *parent) :
  7:     QWidget(parent,Qt::FramelessWindowHint)
  8: {
  9:     //让程序背景半透明
 10:     this->setWindowOpacity(0.5);
 11:     //加载一幅有部分区域是透明的图片作为程序的界面
 12:     m_Pixmap.load("hudie.png");
 13:     resize(640, 480);
 14:     //保持图片跟界面一样大小
 15:     m_Pixmap = m_Pixmap.scaled(size());
 16: 	//设置自动填充
 17:     setAutoFillBackground(true);
 18:
 19:     //不规则窗口的关键,将图片透明的地方设为穿透
 20:     setMask( m_Pixmap.mask() );
 21:
 22: }
 23:
 24: void TransDialog::paintEvent(QPaintEvent *event)
 25: {
 26:     //绘制背景图片
 27:     QPalette bgPalette = this->palette();
 28:     bgPalette.setBrush(QPalette::Background,m_Pixmap);
 29:     this->setPalette(bgPalette);
 30: }

Qt绘制异形窗体的更多相关文章

  1. Qt 实现 异形 窗体&按钮

    //关键部分代码如下//设置异形窗体 //setWindowOpacity(0.5);//设置窗体透明度 0完全透明,1完全不透明 this->setWindowFlag(Qt::Framele ...

  2. QT绘制半透明窗体(改写paintEvent,超级简单)

    在派生类中重载QDialog的void paintEvent(QPaintEvent *)事件,在这个函数中加入以下代码 QPainter painter(this);    QLinearGradi ...

  3. QT中异形窗口的绘制(winEvent处理WM_NCHITTEST消息)

    这里讨论的只是Windows平台上的实现. 在QT中绘制异形窗口,只要设定 windowFlag 为 CustomizeWindowHint,再结合setMask()就可以做出各种奇形怪状的窗口.相对 ...

  4. Qt自绘窗体

    也许大部分情况下我们不需要自己手动绘制一个窗体,大部分可以通过图片来实现,本篇仅以学习的态度来初略的理解Qt界面的自定义绘制功能.   本篇将实现以下功能: 1.绘制一个椭圆形 2.支持界面的移动操作 ...

  5. DSAPI显示PNG异形窗体

    使用DSAPI实现PNG异形窗体,注意,该窗体为层样式窗体,以PNG或32位带透明通道的图像合成到屏幕,此方法不会触发窗体的重绘,故原窗体(包括其子控件)均不会显示,如果需要更新画面,需要重新用代码等 ...

  6. Qt 绘制图表 - Qt Charts版

    一.前言 自从 Qt 发布以来,给广大跨平台界面研发人员带来了无数的福利.但是Qt自己却一直没有提供自带的图表库,这就使得 QWT.QCustomPlot 等第三方图表库有了巨大的生存空间,为了降低开 ...

  7. FireMonkey下的异形窗体拖动(句柄转换)

    DelphiXE2 Firemoney FMX 的窗体不只是为windows的, 所以很多功能都没有了. 最常见的就是拖拽了 先看 VCL时代 一个经典拖动代码 ReleaseCapture(); S ...

  8. gdi+ 高速绘制透明窗体

    gdi+ 高速绘制透明窗体: 方法一: 1.用Iamge对象载入png资源, 2.调用drawimage函数讲图片绘制出了 3.UpdateLayeredWindow对窗体进行布局 方法二: 1.用B ...

  9. QT实现不规则窗体

    看到网上有很多不规则窗体的实现,效果很酷.于是使用QT也实现了一个,QT的不规则窗体实现非常简单,只需要设置一个mask(遮掩)图片,这个图片的格式可以使用png或bmp格式,我使用了png格式,默认 ...

随机推荐

  1. C++的XML编程经验――LIBXML2库使用指南[转]

    C++的XML编程经验――LIBXML2库使用指南 写这篇文章的原因有如下几点:1)C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,LIBXML2是其中一种很优秀的XML ...

  2. 前端框架Bootstrap

    前端框架Bootstrap http://www.bootcss.com/ Bootstrap 编码规范 http://codeguide.bootcss.com/

  3. 自己动手写CPU之第九阶段(8)——MIPS32中的LL、SC指令说明

    将陆续上传新书<自己动手写CPU>,今天是第47篇. 9.7 ll.sc指令实现思路 9.7.1 实现思路 这2条指令都涉及到訪问链接状态位LLbit,能够将LLbit当做寄存器处理,ll ...

  4. Android之使用AchartEngineActivity引擎绘制柱状图、曲线图

    1.简介 AChartEngine(简称ACE)是Google的一个开源图表库(for Android).它功能强大,支持散点图.折线 .关于里面类的具体使用,请下载响应的文档说明(主页上有). 2. ...

  5. yii2 rbac 设计

    tbl_auth_item 根据type存储认证项目...role.task.operation 游客... 不能操作任何模块 普通用户 ..biz_rule..需要登录 只有这里返回true,才能进 ...

  6. Java使用内存映射实现大文件的上传

    在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如 ...

  7. C#_自动化测试 (四) 自动卸载软件

    在平常的测试工作中,经常要安装软件,卸载软件,  即繁琐又累.  安装和卸载完全可以做成自动化. 安装软件我们可以通过自动化框架,自动点击Next,来自动安装.  卸载软件我们可以通过msiexec命 ...

  8. C++_快速排序

    void quick_sort(int s[],int l,int r) { if(l<r) { int i=l,j=r,x=s[l]; while(i<j) { while( i< ...

  9. PHP.9-HTML+CSS(三)-CSS样式

    CSS样式 CSS是Cascading Style Sheets的简写,它除了可以轻松设置网页元素的显示位置和格式处,甚至还能产生滤镜,图像淡化,网页淡入淡出的渐变效果.CSS就是要对网页的显示效果实 ...

  10. struts2.1笔记07:Sturts.xml配置中的包介绍

    1. 2.这里上面namespace作用是介绍: (1)如果<package>配置在struts1中如下: (2)同样的配置在struts2中如下: