Qt自绘窗体

时间:2022-09-22 12:43:36

也许大部分情况下我们不需要自己手动绘制一个窗体,大部分可以通过图片来实现,本篇仅以学习的态度来初略的理解Qt界面的自定义绘制功能。

 

本篇将实现以下功能:

1、绘制一个椭圆形

2、支持界面的移动操作

3、Esc退出

头文件:

  1: #include <QDialog>
  2:
  3: class DrawDialog : public QDialog
  4: {
  5:     Q_OBJECT
  6:
  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自绘窗体的更多相关文章

  1. QT实现不规则窗体

    看到网上有很多不规则窗体的实现,效果很酷.于是使用QT也实现了一个,QT的不规则窗体实现非常简单,只需要设置一个mask(遮掩)图片,这个图片的格式可以使用png或bmp格式,我使用了png格式,默认 ...

  2. 窗体背景的绘制(Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息&lpar;WM&lowbar;ERASEBKGND&rpar;,并自定义方法来实现重绘窗体背景)

    核心思想:由于Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景.通过TImage组件也可以实现,但是重写W ...

  3. Qt无边框窗体-最大化时支持拖拽还原

    目录 一.概述 二.效果展示 三.demo制作 1.设计窗体 2.双击放大 四.拖拽 五.相关文章 原文链接:Markdown模板 一.概述 用Qt进行开发界面时,既想要实现友好的用户交互又想界面漂亮 ...

  4. Qt无边框窗体-模拟模态窗体抖动效果

    目录 一.概述 二.效果展示 三.功能实现 四.相关文章 原文链接:Qt无边框窗体-模拟模态窗体抖动效果 一.概述 用Qt开发windows客户端界面确实是一大利器,兼顾性能的同时,速度相对来说也不错 ...

  5. Qt 如何使窗体初始最大化

    Qt 如何使窗体初始最大化 使用以下函数即可解决: void QWidget::setWindowState ( Qt::WindowStateswindowState ) 这样的函数,通过它可以设置 ...

  6. Qt Designer 修改窗体大小改变控件位置

    一.新建一个窗体 用qt designer 新建一个QWidget窗体, 在窗体中右键 选择布局, 发现布局是选择不了的,这个是因为窗体里面没有添加控件, 任意添加空间后便可选择 右键-- 布局-- ...

  7. Qt 无边框窗体改变大小 完美实现(全部自己实现)

    近期,做项目用到无边框窗体,令人蛋疼的是无边框窗体大小的改变要像右边框那样,上下左右四周,而且要流畅. 网上也找了些代码,发现居然还要连接到windows事件,这显然不合常理,后来自己新建了demo, ...

  8. Qt绘制异形窗体

    异形窗体即不规则窗体,一般采用png图片,一般绘制异形窗体分两步: 1.设置遮罩区 2.绘制图片   使用png图片的透明部分作为遮罩区,然后绘制图片,这样我们就看到一个只绘制了非透明部分的图形,废话 ...

  9. Qt 无边框窗体改变大小 完美实现

    近期,做项目用到无边框窗体,令人蛋疼的是无边框窗体大小的改变要像右边框那样,上下左右四周,而且要流畅. 网上也找了些代码,发现居然还要连接到windows事件,这显然不合常理,后来自己新建了demo, ...

随机推荐

  1. &period;NET正则表达式基础入门(一)

    字符组 正则表达式的字符组十分简单,就是列出你所想要匹配的字符.阅读本章前,建议先下载我于CSDN上传的示例代码,下载无需分数,下载链接. 1.普通字符组 普通字符组,列出所有你需要匹配的字符. 例如 ...

  2. Test Tex

    \begin{equation}\label{exampleone}r = r_F+ \beta (r_M - r_F) + \epsilon\end{equation}

  3. 某表含有N个字段超精简模糊查询方法

    我们在做多个字段模糊查询时,是不是觉得非常麻烦?比如我要模糊查询某表多个字段存在某数据时,如下 select * from table where a like '%key%' or b  like ...

  4. 【转】Cannot change version of project facet Dynamic Web Module to 3&period;1 (Eclipse Maven唯一解决方案)

    If you want to use version 3.1 you need to use the following schema: http://xmlns.jcp.org/xml/ns/jav ...

  5. Android开源项目(转载)

    第一部分 界面 ImageView.ProgressBar及其他如Dialog.Toast.EditText.TableView.Activity Animation等等. 一.ListView an ...

  6. c&plus;&plus;实现dll注入其它进程

    DLL注入技术才具有强大的功能和使用性,同时简单易用,因为DLL中可以实现复杂的功能和很多的技术. 技术要点: 1.宿主进程调用LoadLibrary,就可以完成DLL的远程注入.可以通过Create ...

  7. C&num;实现大数据量TXT文本数据快速高效去重

    原文 C#实现大数据量TXT文本数据快速高效去重 对几千万的TXT文本数据进行去重处理,查找其中重复的数据,并移除.尝试了各种方法,下属方法是目前尝试到最快的方法.以下代码将重复和不重复数据进行分文件 ...

  8. Ubuntu 14&period;04LTS Gnome GUI初体验及163更新源配制

    Ubuntu 14.04 LTS于前天(2014.4.17)公布, 我今天将我的系统升级到最新, 体验了下最新的UI系统. 我选择了Ubuntu Gnome 的GUI界面.我曾经的系统是12.04lt ...

  9. selenium&plus;java破解极验滑动验证码

    摘要 分析验证码素材图片混淆原理,并采用selenium模拟人拖动滑块过程,进而破解验证码. 人工验证的过程 打开威锋网注册页面(https://passport.feng.com/?r=user/r ...

  10. MachineLearningOnCoursera

    Week Six F Score \[\begin{aligned} P &= &\dfrac{2}{\dfrac{1}{P}+\dfrac{1}{R}}\\ &= & ...