本文主要是介绍Qt实现异形窗体,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
-
概述
方法一:
采用遮罩方式,用图片把控件遮挡
方法二:
采用图片透明度的方式,绘制图片时把透明度调到100%
第一种方法绘制的图片边沿会有明显的虚线框,第二种方法绘制图片比较平滑 -
实例代码
.h文件:#ifndef WIDGET_H #define WIDGET_H#include <QWidget> class QPixmap;class Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent = 0);void paintEvent(QPaintEvent *);private:QPixmap m_pixmap; };#endif // WIDGET_H
.cpp文件:
#include "widget.h" #include <QPixmap> #include <QBitmap> #include <QPainter>#define method 1 //1: 第一种方法 0: 第二种方法Widget::Widget(QWidget *parent): QWidget(parent) {setWindowFlags(Qt::FramelessWindowHint);m_pixmap.load(":/images/linux.png");resize(m_pixmap.size());#if methodsetMask(m_pixmap.mask()); #elsesetAttribute(Qt::WA_TranslucentBackground); #endif }void Widget::paintEvent(QPaintEvent *) { #if methodQPalette palette = this->palette();palette.setBrush(QPalette::Background, m_pixmap);this->setPalette(palette); #elseQPainter painter(this);painter.fillRect(this->rect(), QColor(0, 0, 255, 0));painter.drawPixmap(rect(), m_pixmap); #endif }
-
运行结果
方法一效果图
方法二效果图
这篇关于Qt实现异形窗体的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!