Qt利用QPainter绘制心形以及Qt设置透明窗体的四种方法
2016-10-12 22:56
806 查看
在枯燥的编程生活中,有时候也需要自娱自乐,今天就利用Qt的QPainter绘制一颗桃心,虽然不怎么漂亮,但还是挺开心的!
下面是绘制心形的具体实现,一起来看看吧!
#ifndef _FLOWER_H_
#define _FLOWER_H_
#include <QMainWindow>
#include <QTimer>
class CFlower : public QMainWindow
{
Q_OBJECT
public:
CFlower(QWidget *parent = 0);
~CFlower();
void init();
void initTimer();
void paintEvent(QPaintEvent *event);
private:
QTimer *timer;
QPainter *painter;
};
#endif // _FLOWER_H_
最后的效果图:这个生成的过程的动态的,一个点一个点生成的,有兴趣的朋友可以试下,我的透明窗口,截图用的桌面背景
在这个例子中我们用到了窗口的透明化,下面就来讲讲Qt的四种使窗体透明的方法:
1、设置窗体的背景色
在构造函数里添加代码,需要添加头文件qpalette或qgui
QPalette pal = palette();
pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00));
setPalette(pal);
通过设置窗体的背景色来实现,将背景色设置为全透。
效果:窗口整体透明,但窗口控件不透明,QLabel控件只是字显示,控件背景色透明;
窗体客户区完全透明。
2、使用函数setAttribute(Qt::WA_TranslucentBackground, true);
同样在构造函数中,效果和第一种方法相同。
3、窗口及其上面的控件都半透明:
setWindowOpacity(0.7)
这个函数可以分10个等级调整透明度,配合QSlider控件可以做成控制条
效果:窗口及控件都半透明。
4.窗口整体不透明,局部透明:
在Paint事件中使用Clear模式绘图。
void TestWindow::paintEvent( QPaintEvent* )
{
QPainter p(this);
p.fillRect( 10, 10, 300, 300, Qt::SolidPattern );
}试验效果:绘制区域全透明。
注意--> 如果窗体没有去边框,而直接调用窗口透明,会是一片漆黑的窗体!
下面是绘制心形的具体实现,一起来看看吧!
#ifndef _FLOWER_H_
#define _FLOWER_H_
#include <QMainWindow>
#include <QTimer>
class CFlower : public QMainWindow
{
Q_OBJECT
public:
CFlower(QWidget *parent = 0);
~CFlower();
void init();
void initTimer();
void paintEvent(QPaintEvent *event);
private:
QTimer *timer;
QPainter *painter;
};
#endif // _FLOWER_H_
#include "flower.h" #include <QColor> #include <QPainter> #include <QPixmap> #define MAX_SIZE (173) CFlower::CFlower(QWidget *parent) : QMainWindow(parent) { initTimer(); init(); } CFlower::~CFlower() { } void CFlower::init() { /*设置窗体无边框*/ setWindowFlags(Qt::FramelessWindowHint); /* 窗口整体透明,但窗口控件不透明*/ this->setAttribute(Qt::WA_TranslucentBackground,true); this->showFullScreen(); } void CFlower::initTimer() { timer=new QTimer(this); timer->setInterval(100); connect(timer,SIGNAL(timeout()),this,SLOT(repaint())); } void CFlower::paintEvent(QPaintEvent *event) { painter = new QPainter(this); QPixmap pix; int j = 0; static int i = 0; i += 3; /* 这里的坐标是心形公式求出来的(来源网络), 然后自己 在加了一些一下偏移量,此处画了两颗心*/ if(i < MAX_SIZE){ timer->start(); float p = 150 *(1-sin(i*5*3.14159/360)); int x= 420 + p*cos(i*5*3.14159/360); int y= 120- p*sin(i*5*3.14159/360); pix.load(":/new/prefix1/img/1.png"); painter->drawPixmap(x,y,pix.width(),pix.height(),pix); }else if(MAX_SIZE <= i && i < MAX_SIZE * 2){ timer->start(); j = i % MAX_SIZE; float p = 150 *(1-sin(j*5*3.14159/360)); int x=320 + p*cos(j*5*3.14159/360); int y=120- p*sin(j*5*3.14159/360); pix.load(":/new/prefix1/img/1.png"); painter->drawPixmap(x + 350,y,pix.width(),pix.height(),pix); } }
#include "flower.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); CFlower w; w.show(); return a.exec(); }
最后的效果图:这个生成的过程的动态的,一个点一个点生成的,有兴趣的朋友可以试下,我的透明窗口,截图用的桌面背景
在这个例子中我们用到了窗口的透明化,下面就来讲讲Qt的四种使窗体透明的方法:
1、设置窗体的背景色
在构造函数里添加代码,需要添加头文件qpalette或qgui
QPalette pal = palette();
pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00));
setPalette(pal);
通过设置窗体的背景色来实现,将背景色设置为全透。
效果:窗口整体透明,但窗口控件不透明,QLabel控件只是字显示,控件背景色透明;
窗体客户区完全透明。
2、使用函数setAttribute(Qt::WA_TranslucentBackground, true);
同样在构造函数中,效果和第一种方法相同。
3、窗口及其上面的控件都半透明:
setWindowOpacity(0.7)
这个函数可以分10个等级调整透明度,配合QSlider控件可以做成控制条
效果:窗口及控件都半透明。
4.窗口整体不透明,局部透明:
在Paint事件中使用Clear模式绘图。
void TestWindow::paintEvent( QPaintEvent* )
{
QPainter p(this);
p.fillRect( 10, 10, 300, 300, Qt::SolidPattern );
}试验效果:绘制区域全透明。
注意--> 如果窗体没有去边框,而直接调用窗口透明,会是一片漆黑的窗体!
相关文章推荐
- Qt 设置窗体QPalette 以及透明问题
- CSS的四种设置方法以及CSS各种选择器的用法
- 设置窗体透明、黑暗度、背景模糊的方法
- Qt中设置窗体大小的方法
- android在代码中四种设置控件(以及TextView的文字颜色)背景颜色的方法
- Qt中设置窗体固定大小的方法
- Qt 中设置窗体透明度的几种方法
- 窗体透明,窗体上控件不透明的设置方法
- 转:设置图片透明的四种方法
- Qt 中设置窗体透明度的几种方法
- iOS 导航条透明(以及自定义颜色)的方法,去掉导航条底部黑线,随着tableView滚动设置导航条变色
- Qt 中设置窗体透明度的几种方法
- android在代码中四种设置控件(以及TextView的文字颜色)背景颜色的方法
- Qt控件半透明设置,以及Qt控件去除父控件背景设置的方法总结
- 设置背景透明的窗体,GDI+绘制异形WINFORM
- Qt 中设置窗体透明度的几种方法
- QT之桌面精灵实现(一) --- 透明窗体和图片绘制
- VC窗体透明而控件不透明以及Static文本背景透明方法
- VC窗体透明而控件不透明以及Static文本背景透明方法
- QT设置窗体透明