QT笔记之不规则窗口的实现

QT实现的不规则窗口,是根据图片的形状显示

1.去标题栏

2.设置窗口背景为透明色

3.最后给窗口设置背景色

注:背景图为镂空的 格式为.png

图片资源下载:http://pan.baidu.com/s/1i5JkIot

.h

 1 #ifndef QANORMALYDLG_H
 2 #define QANORMALYDLG_H
 3
 4 #include <QWidget>
 5 #include "ui_qanormalydlg.h"
 6
 7 class QAnormalyDlg : public QWidget
 8 {
 9     Q_OBJECT
10
11 public:
12     QAnormalyDlg(QWidget *parent = 0);
13     ~QAnormalyDlg();
14
15     void paintEvent(QPaintEvent *e);
16
17     void mousePressEvent(QMouseEvent *e);
18
19     void mouseMoveEvent(QMouseEvent *e);
20 private:
21     Ui::QAnormalyDlg ui;
22
23     QPoint move_point; //移动的距离
24 };
25
26 #endif // QANORMALYDLG_H

.cpp

 1 #include "qanormalydlg.h"
 2 #include <QPainter>
 3 #include <QMouseEvent>
 4
 5 QAnormalyDlg::QAnormalyDlg(QWidget *parent)
 6     : QWidget(parent)
 7 {
 8     ui.setupUi(this);
 9
10     //去表框  同时保留窗口原有的属性
11     setWindowFlags(Qt::FramelessWindowHint | windowFlags() );
12
13     //把窗口背景设为透明
14     setAttribute(Qt::WA_TranslucentBackground);
15
16     resize(600,652);
17 }
18
19 QAnormalyDlg::~QAnormalyDlg()
20 {
21
22 }
23
24 void QAnormalyDlg::paintEvent(QPaintEvent *e)
25 {
26     QPainter p(this);
27     p.drawPixmap(0, 0, QPixmap("122.png"));
28 }
29
30 void QAnormalyDlg::mousePressEvent(QMouseEvent *e)
31 {
32     if (e->button() == Qt::RightButton)
33     {
34         //右键关闭窗口
35         close();
36     }
37
38     else if (e->button() == Qt::LeftButton)
39     {
40         //求坐标差,当前鼠标坐标 - 窗口左上角坐标
41         //frameGeometry返回窗口的矩形坐标, topLeft返回窗口左上角点的坐标
42         //move_point = e->globalPos() - this->frameGeometry().topLeft();
43         move_point = e->globalPos() - this->pos();
44     }
45 }
46
47 void QAnormalyDlg::mouseMoveEvent(QMouseEvent *e)
48 {
49     if (e->buttons() & Qt::LeftButton)
50     {
51         move(e->globalPos()-move_point);
52     }
53 }

效果:

时间: 2024-11-11 00:54:05

QT笔记之不规则窗口的实现的相关文章

QT笔记之自定义窗口拖拽移动

1.QT自定义标题栏,拖拽标题栏移动窗口(只能拖拽标题,其他位置无法拖拽) 方法一: 转载:http://blog.sina.com.cn/s/blog_4ba5b45e0102e83h.html .h文件中 1 //自己重新实现拖动操作 2 protected: 3 4 void mouseMoveEvent ( QMouseEvent * event ); 5 6 void mousePressEvent ( QMouseEvent * event ); 7 8 void mouseRele

QT:不规则窗口的实现

主要思路:1:将窗体设为Qt::FramelessWindowHint(去掉标题栏).2:用一幅有部分区域是透明的图片作为程序的界面,并将图片透明的地方设为穿透. 3:重载程序的鼠标事件. 运行时截图(浅绿色的是桌面背景) 源代码: [cpp] view plaincopyprint? #include <QtGui> class IrregularWidget : public QWidget { Q_OBJECT public: IrregularWidget(QWidget *paren

QT笔记之实现阴影窗口

方法一: 代码实现 重写void paintEvent(QPaintEvent *event); void QT_Test::paintEvent(QPaintEvent *event) { QPainterPath path; path.setFillRule(Qt::WindingFill); path.addRect(10, 10, this->width()-20, this->height()-20); QPainter painter(this); painter.setRende

QT笔记之VS2010 Qt中导入qrc资源文件

转载1:http://qimo601.iteye.com/blog/1404693 转载2:http://blog.sina.com.cn/s/blog_92cde3060101lobm.html 转载3:http://www.devbean.net/2012/08/qt-study-road-2-resource-files/ 刚开始自学QT,好多东西不是很明白,从网上搜出来一些资料,先记录下来,以方便以后学习.习惯了使用VS进行写项目,所以选择下载Qt5.2.Qt插件,在给窗口和控件添加背景

MFC小程序—————02 不规则窗口小应用程序

什么不说了,先上程序截图: 运行结果是有一棵有星星在闪烁的圣诞树,还会循环播放背景音乐. 之前也是在网上看到类似的一个程序,然后自己最近也在学MFC,所以就模仿着写了一个, 其中使用的是GDI+来显示.png透明背景的图片,图片是在网上找的一张,然后又用PS把其中发光的星星给去掉了,做了一张不带发光星星的 .png图片,然后在程序中使用一个定时器来定时刷新窗口背景,使用这两张图片交替变换,实现星星闪烁的动画效果,利用MCI来播放.mp3的 背景音乐(如果想更改背景音乐,请先删除res文件夹下的s

《30天自制操作系统》笔记(08)——叠加窗口刷新

<30天自制操作系统>笔记(08)--叠加窗口刷新 进度回顾 上一篇中介绍了内存管理的思路和算法,我们已经可以动态申请和释放内存了.这不就是堆(Heap)么.在此基础上,本篇要做一段程序,一并解决窗口和鼠标的叠加处理问题. 问题 在之前的<<30天自制操作系统>笔记(05)--启用鼠标键盘>篇,已经能够移动鼠标了.但是遗留了如下图所示的一个小问题. 我们希望的情形是这样的: 实际上,当前版本的OS还没有窗口图层的东西.本篇要做一段程序,一并解决窗口和鼠标的叠加处理问题.

QT笔记:数据库总结(一)

QT笔记:数据库总结(一)http://blog.csdn.net/reborntercel/article/details/6991147 http://www.devbean.net/2013/06/qt-study-road-2-sql-model/

《30天自制操作系统》笔记(09)——绘制窗口

<30天自制操作系统>笔记(09)--绘制窗口 进度回顾 上一篇中介绍了图层式窗口管理的思路和算法.在此基础上,本篇就解决绘制窗口及其简单的优化问题. 这里稍微吐槽一下<30天自制操作系统>原作者.全书我刚刚看了三分之一,写得确实不错,但是我能感受到原作者是习惯用汇编语言和汇编思维来写程序的.虽然书里尽量使用了C语言,但给我一种用C写汇编的感觉.也可能是原作者故意简化了OS开发过程,方便初学者理解吧.幸好这在我预料之中,一开始我就打算先看完这本书然后自己再从零设计OS的. 看似立体

Windows SDK 实现不规则窗口介绍

不规则窗口在程序界面设计中能提供非常好的用户体验,以下是我程序运行时的效果图: 以下是代码,注意需要修改一些简单的位置,如资源ID,项目的头文件等,这些是根据你创建的win32程序的项目名改变的,我的项目名为RgnWindow. View Row Code 1 // RgnWindow.cpp : Defines the entry point for the application. 2 // 3   4 #include "stdafx.h" 5 #include "Rg