Qt自绘窗体
也许大部分情况下我们不需要自己手动绘制一个窗体,大部分可以通过图片来实现,本篇仅以学习的态度来初略的理解Qt界面的自定义绘制功能。
本篇将实现以下功能:
1、绘制一个椭圆形
2、支持界面的移动操作
3、Esc退出
头文件:
1: #include <QDialog>2:3: class DrawDialog : public QDialog4: {5: Q_OBJECT6:7: public:8: explicit DrawDialog(QWidget *parent = 0);9: void mousePressEvent(QMouseEvent *event);10: void mouseMoveEvent(QMouseEvent *event);11: void paintEvent(QPaintEvent *event) ;12: void keyPressEvent( QKeyEvent * event );13: private:14: QPoint m_CurrentPos;15: };
实现:
1: DrawDialog::DrawDialog(QWidget *parent) :2: QDialog(parent)3: {4: //让程序无边框5: setWindowFlags( Qt::FramelessWindowHint );6: //让程序背景透明7: setAttribute(Qt::WA_TranslucentBackground, true);8: }9:10: void DrawDialog::mousePressEvent(QMouseEvent *event)11: {12: //当鼠标左键按下时,记录当前位置13: if(event->button() == Qt::LeftButton)14: {15: m_CurrentPos = event->globalPos() - frameGeometry().topLeft();16: event->accept();17: }18: QDialog::mousePressEvent(event);19: }20: void DrawDialog::mouseMoveEvent(QMouseEvent *event)21: {22: //支持窗体移动23: if (event->buttons() & Qt::LeftButton)24: {25: move(event->globalPos() - m_CurrentPos);26: event->accept();27: }28: QDialog::mouseMoveEvent(event);29: }30:31: //绘制图形32: void DrawDialog::paintEvent(QPaintEvent *event)33: {34: QPainter painter(this);35: //反走样36: painter.setRenderHint(QPainter::Antialiasing,true);37:38: painter.setPen( QPen(Qt::black, 2) );39: painter.setBrush( Qt::black );40: QRect rect(10,10,200,260);41: //绘制一个鸭蛋42: painter.drawEllipse(rect);43: }44:45: void DrawDialog::keyPressEvent( QKeyEvent * event )46: {47: //按下esc键时,关闭48: if(event->key() == Qt::Key_Escape)49: {50: close();51: }52: }
图片效果(背景是我的桌面)
Qt自绘窗体的更多相关文章
- QT实现不规则窗体
看到网上有很多不规则窗体的实现,效果很酷.于是使用QT也实现了一个,QT的不规则窗体实现非常简单,只需要设置一个mask(遮掩)图片,这个图片的格式可以使用png或bmp格式,我使用了png格式,默认 ...
- 窗体背景的绘制(Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景)
核心思想:由于Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景.通过TImage组件也可以实现,但是重写W ...
- Qt无边框窗体-最大化时支持拖拽还原
目录 一.概述 二.效果展示 三.demo制作 1.设计窗体 2.双击放大 四.拖拽 五.相关文章 原文链接:Markdown模板 一.概述 用Qt进行开发界面时,既想要实现友好的用户交互又想界面漂亮 ...
- Qt无边框窗体-模拟模态窗体抖动效果
目录 一.概述 二.效果展示 三.功能实现 四.相关文章 原文链接:Qt无边框窗体-模拟模态窗体抖动效果 一.概述 用Qt开发windows客户端界面确实是一大利器,兼顾性能的同时,速度相对来说也不错 ...
- Qt 如何使窗体初始最大化
Qt 如何使窗体初始最大化 使用以下函数即可解决: void QWidget::setWindowState ( Qt::WindowStateswindowState ) 这样的函数,通过它可以设置 ...
- Qt Designer 修改窗体大小改变控件位置
一.新建一个窗体 用qt designer 新建一个QWidget窗体, 在窗体中右键 选择布局, 发现布局是选择不了的,这个是因为窗体里面没有添加控件, 任意添加空间后便可选择 右键-- 布局-- ...
- Qt 无边框窗体改变大小 完美实现(全部自己实现)
近期,做项目用到无边框窗体,令人蛋疼的是无边框窗体大小的改变要像右边框那样,上下左右四周,而且要流畅. 网上也找了些代码,发现居然还要连接到windows事件,这显然不合常理,后来自己新建了demo, ...
- Qt绘制异形窗体
异形窗体即不规则窗体,一般采用png图片,一般绘制异形窗体分两步: 1.设置遮罩区 2.绘制图片 使用png图片的透明部分作为遮罩区,然后绘制图片,这样我们就看到一个只绘制了非透明部分的图形,废话 ...
- Qt 无边框窗体改变大小 完美实现
近期,做项目用到无边框窗体,令人蛋疼的是无边框窗体大小的改变要像右边框那样,上下左右四周,而且要流畅. 网上也找了些代码,发现居然还要连接到windows事件,这显然不合常理,后来自己新建了demo, ...
随机推荐
- C#类索引器的使用
索引器提供了一种可以让类被当作数组进行访问的方式.在C#中,类索引器是通过this的属性实现的.index.ToString("D2")将index转换成一个具有两个字符宽度的字符 ...
- android UI进阶之实现listview中checkbox的多选与记录
今天继续和大家分享涉及到listview的内容.在很多时候,我们会用到listview和checkbox配合来提供给用户一些选择操作.比如在一个 清单页面,我们需要记录用户勾选了哪些条目.这个的实现并 ...
- 日志分析(五) PV&UV
应用设计请求之初,对于url有一定的规划.因此,请求的url格式类似如下: /**/school/****?token=a66cb2a3-e0b7-4f0a-b332-********* token唯 ...
- Branch and Bound:分支限界算法
http://blog.sciencenet.cn/blog-509534-728984.html 分支定界 (branch and bound) 算法是一种在问题的解空间树上搜索问题的解的方法.但与 ...
- iCloud之旅
1.创建BIDTinyPixDocument类 #import <UIKit/UIKit.h> //创建文档类 @interface TinyPixDocument : UIDocumen ...
- SpringMVC的简单示例
首先导入所需的jar包,项目目录结构如下: 之后需要配置一下web.xml文件,内容如下: <?xml version="1.0" encoding="UTF-8& ...
- JavaScript与FileSystemObject
什么是FileSystemObject(简称FSO) FSO 即文件系统对象,是一种列表 Windows 磁盘目录和文件,对目录和文件进行删除.新建.复制.剪切.移动等操作的技术.使用 FSO 网站 ...
- 防止vuejs在解析时出现闪烁
---## 防止vuejs在解析时出现闪烁 ## 原因: 在使用vuejs.angularjs开发时,经常会遇见在如Chrome这类能够快速解析的浏览器上出现表达式({{ express }} ),或 ...
- 使用apache和IIS,共用80端口的一个解决方案【转】
将apache设为使用80端口,IIS使用其它端口,比如81,然后将apache作为IIS的代理. 在httpd.conf里面,取消下面四行的注释: LoadModule proxy_module m ...
- JS的replace方法【转】
replace() 方法的参数 replacement 可以是函数而不是字符串.在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用.该函数的第一个参数是匹配模式的字符串.接下来的参数 ...