设为首页 加入收藏

TOP

Qt绘制异形窗体
2015-07-16 12:57:20 来源: 作者: 【 】 浏览:8
Tags:绘制 异形 窗体

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


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


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



头文件:


? 1: #include


? 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


? 3: #include


? 4: #include


? 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: }


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇如何改善Java中锁的性能 下一篇Qt5中文显示出现乱码解决

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: