QT实现不规则窗体和透明窗体
2016-10-29 11:13
435 查看
不规则窗体的实现有两种方式:一种是设置窗体的掩码图像;另一种是设置窗体背景透明,然后重写其绘图函数,将背景图绘制上去。 第一种方式:首先要准备两张图像,一张是要显示的图像,另一张是第一张图的掩码图像,黑色部分是你的窗体要显示的部分,如图: 具体实现的关键代码如下://IrregularForm1.hIrregularForm1::IrregularForm1(QWidget *parent) :QWidget(parent){setWindowFlags(Qt::FramelessWindowHint);//设置窗体无边框//设置背景QPixmap pixmap(":/pic.png");QPalette palette;palette.setBrush(backgroundRole(), QBrush(pixmap));setPalette(palette);//设置窗体的掩码图像,抠除图像的白色区域实现不规则窗体QBitmap bitmap(":/picmask.png");setMask(bitmap);}运行效果不是特别完美,应该是我的掩码图像的问题,如图:这种方式有一个问题,就是当你的图像特别不规则的时候,会有很明显的锯齿出现。之前做过一个卡通图像就出现这个问题,解决的办法是使用下面的第二种方法。 第二种方式:只需要准备一张图片,透明部分将不会显示,支持半透明。我这里弄了一张背景透明,前景半透明的图像,如图:具体实现的关键代码如下:
//IrregularForm2.cppIrregularForm2::IrregularForm2(QWidget *parent) :QWidget(parent){this->setWindowFlags(Qt::FramelessWindowHint);//设置窗体无边框this->setAttribute(Qt::WA_TranslucentBackground);//设置背景透明pic.load(":/IrregularPic.png");//加载图像this->resize(pic.size());}//重写绘图事件void IrregularForm2::paintEvent(QPaintEvent *){QPainter painter(this);painter.drawPixmap(0, 0, pic);//绘制图像}效果截图:说到这里,我们的不规则透明窗体虽然创建出来了,但是现在我们无法移动它了,现在我们就来实现左键拖动窗体的功能,首先要先声明两个变量,另外要重写三个事件,代码如下:
//IrregularForm1.hclass IrregularForm1 : public QWidget{Q_OBJECTpublic:explicit IrregularForm1(QWidget *parent = 0);protected:QPoint oldPos;bool press;void mousePressEvent(QMouseEvent *event);void mouseMoveEvent(QMouseEvent *event);void mouseReleaseEvent(QMouseEvent *event);};关键的实现代码(press变量在构造函数中初始化为false)://IrregularForm1.cppvoid IrregularForm1::mousePressEvent(QMouseEvent *event){if(event->button() == Qt::LeftButton){oldPos = event->globalPos();press = true;}}void IrregularForm1::mouseMoveEvent(QMouseEvent *event){if (press){this->move(this->pos() + event->globalPos() - oldPos);oldPos = event->globalPos();}}void IrregularForm1::mouseReleaseEvent(QMouseEvent *event){press = false;}这样就实现不规则窗体的移动功能了。 附件:源码IrregularForm.zip下载地址:http://pan.baidu.com/share/link?shareid=135850&uk=3238766853
相关文章推荐
- QT实现不规则窗体和透明窗体
- 用Qt实现窗体的无边框、可移动、透明不规则显示(需背景透明的图片)
- QT实现不规则窗体和透明窗体
- QT实现不规则窗体和透明窗体
- [QT编程]QT实现不规则窗体和透明窗体
- 用Qt实现窗体的无边框、可移动、透明不规则显示(需背景透明的图片)
- Qt去标题栏、实现透明窗体
- C# 在windows form实现不规则窗体&透明窗体
- QT实现不规则窗体
- QT中不规则窗体和部件的实现
- QT实现不规则窗体
- 【转】QT实现不规则窗体
- Qt 不规则窗体的实现
- QT中不规则窗体和部件的实现
- wxWidgets 不规则透明WinForm窗体(通过透明图片实现)
- Qt不规则窗体的实现
- Qt实现当鼠标移动到窗体上,窗体由半透明变为不透明
- Qt中不规则窗体和部件的实现
- Qt 透明窗体实现
- Qt中不规则窗体和部件的实现