环境配置 :MinGW + QT 5.12

效果图(红色部分是桌面背景颜色):


下面这张图片有助于分析(窗口边角弧度BORDER_RADIUS没有注明):


TestArrowWidget类继承自QWidget

  • TestArrowWidget.h文件
#define SHADOW_WIDTH 10                 // 窗口阴影宽度;
#define TRIANGLE_WIDTH 15               // 小三角的宽度;
#define TRIANGLE_HEIGHT 10              // 小三角的高度;
#define BORDER_RADIUS 5                 // 窗口边角的弧度;class TestArrowWidget : public QWidget
{Q_OBJECTpublic:TestArrowWidget(QWidget *parent = nullptr);void setStartPos(int startX); // 设置小三角起始位置;void setTriangleInfo(int w, int h); // 设置小三角宽和高;protected:void paintEvent(QPaintEvent *) override;private:int m_startX; // 小三角起始位置;int m_triangleWidth; // 小三角的宽度;int m_triangleHeight; // 小三角高度;void initUi();
};
  • TestArrowWidget.c文件
TestArrowWidget::TestArrowWidget(QWidget *parent): QWidget(parent), m_triangleWidth(TRIANGLE_WIDTH), m_triangleHeight(TRIANGLE_HEIGHT)
{initUi();
}void TestArrowWidget::initUi()
{setWindowFlags(windowFlags() | Qt::FramelessWindowHint);setAttribute(Qt::WA_TranslucentBackground);setFixedSize(300, 230);m_startX = height() / 2 - TRIANGLE_WIDTH / 2;auto shadowEffect = new QGraphicsDropShadowEffect(this); //设置阴影边框;shadowEffect->setOffset(0, 0);shadowEffect->setColor(Qt::gray);shadowEffect->setBlurRadius(SHADOW_WIDTH);this->setGraphicsEffect(shadowEffect);
}void TestArrowWidget::setStartPos(int startX)  //设置小三角显示的起始位置;
{m_startX = startX;
}void TestArrowWidget::setTriangleInfo(int w, int h)
{m_triangleWidth = w;m_triangleHeight = h;
}void TestArrowWidget::paintEvent(QPaintEvent *)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);painter.setPen(Qt::NoPen);painter.setBrush(QColor(230, 245, 230, 250));QPolygon trianglePolygon_Left;trianglePolygon_Left << QPoint(SHADOW_WIDTH, m_startX + m_triangleWidth / 2);trianglePolygon_Left << QPoint(SHADOW_WIDTH + m_triangleHeight, m_startX);trianglePolygon_Left << QPoint(SHADOW_WIDTH + m_triangleHeight, m_startX + m_triangleWidth);QPainterPath drawPath;drawPath.addRoundedRect(m_triangleHeight + SHADOW_WIDTH, SHADOW_WIDTH,width() - SHADOW_WIDTH * 2 - m_triangleHeight,height() - SHADOW_WIDTH * 2,BORDER_RADIUS, BORDER_RADIUS);  //RectdrawPath.addPolygon(trianglePolygon_Left);  //Triangle;painter.drawPath(drawPath);
}

运行时虽然能够正常显示窗口,但是应用程序输出窗口会打印:(原因好像是设置无标题栏属性(Qt::FramelessWindowHint)和窗口透明属性(Qt::WA_TranslucentBackground)导致的)

环境配置 :MinGW + QT 5.12

Qt绘制形状不规则窗口(二)相关推荐

  1. Qt绘制形状不规则窗口(一)

    环境配置 :MinGW + QT 5.12 效果图: 其实这个缩略图就是模仿Chrome书签栏拖拽书签时的缩略图(如下图所示).主要是重写QWidget的paintEvent函数. thumbnail ...

  2. QT不规则窗口的移动原理和证明/QT窗口背景透明(附代码实现)

    有些情况下,我们需要实现不规则窗口,比如在软件的加载窗口,可以使用背景透明的图片填充窗口,从而创建炫酷的不规则窗口.下面介绍使用背景透明图片设计不规则窗口以及实现鼠标拖拽不规则窗口的方法. 首先,我们 ...

  3. Qt:Qt实现具有反锯齿的圆角窗口:不规则窗口

    @import url(http://www.cppblog.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHi ...

  4. 使用Qt绘制二维码 QRcode

    --今天的我们,是站在巨人的肩膀上前行. 二维码自从出现以来,已经极大地改变了我们的生活方式,它能容纳一些简短的信息,却又不那么简短,以至于很多场合都能使用二维码作为信息的载体.一个月以前,有个老师跟 ...

  5. CreateWindow创建异形窗口(不规则窗口) - WINDOWS API 第三弹 异形窗口。

    本期将自己从底层中抽离出来,来搞点UI设计相关的,毕竟UI是本人强项(矮子里面拔高个吧).你的UI界面是不是都是矩形框,你有想过其他形状的界面吗?是不是感觉计算机应用就应该是方方正正的.答案肯定是NO ...

  6. linux qt绘框,Qt绘制异形窗体

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

  7. python制作窗口界面_python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例

    窗口背景主要包括,背景色与背景图片,设置窗口背景有三种方法 使用QSS设置窗口背景 使用QPalette设置窗口背景 实现PainEvent,使用QPainter绘制背景 QSS设置窗口背景 在QSS ...

  8. 如何用Qt绘制一颗好看的二叉树

    原创~~作者码字不易,如需转载请注明出处,谢谢~ 欢迎来我的博客小站(Aayu Yain = 学无止境 = 阿宇的可爱博客)逛一逛,有惊喜呦~ 最近在学习数据结构二叉树,通过在C++控制台界面已实现了 ...

  9. Python Qt GUI设计:窗口布局管理方法【基础】(基础篇—5)

    目录 1.布局管理器进行布局 2.容器控件进行布局 3.geometry属性:控件绝对布局 4.sizePolicy属性:微调优化控件布局 Qt Designer提供4种窗口布局方式,分别如下: Ve ...

最新文章

  1. LeetCode简单题之两个数对之间的最大乘积差
  2. mysql 获取游标索引_MYSQL视图 事务 游标 索引及其使用
  3. Linux: debian/ubuntu下安装和使用Java 8
  4. 为什么不能在init和dealloc函数中使用accessor方法
  5. .net 学习 报错 Invalid temp directory in chart handler configuration [c:\TempImageFiles\]
  6. 深度学习核心技术精讲100篇(四十九)-深度学习之关联规则
  7. XNA 游戏 运行时编辑器
  8. android 能自动选择的listview,Android ListView多选模式
  9. 教你写出可读性高的Python代码
  10. javaweb学习6——自定义标签
  11. FPGA你必须知道的那些事儿
  12. 六种方法帮你解决模型过拟合问题
  13. 【基于物理的渲染(PBR)白皮书】(一) 开篇:PBR核心知识体系总结与概览
  14. Mysql从入门到入魔——5. 聚集、分组、子查询
  15. 三年经验的程序员,为什么能力要强过80%的人
  16. Blazor是春天还是寒风里的挣扎
  17. 从0开始的网游ARPG实战案例:暗黑战神(第一章至第四章:设计登陆和创建角色功能实现)
  18. 细谈数据库表锁和行锁
  19. 怎么把回收站里的计算机放到桌面,如何在桌面上添加回收站
  20. 盘点 2021 年十大网络安全事件

热门文章

  1. 重新打包mysql数据库文件_服务器每天早上备份一次 MySQL 数据库并自动打包,同时删除 5 天前的备份文件...
  2. python安装pillow图形处理库
  3. python导入数据画折线图_Python读取Excel表格,并同时画折线图和柱状图的方法
  4. 中文件编码方式_一文解开java中字符串编码的小秘密
  5. python程序加密_Python简单的加密程序:如何循环Z回到A
  6. ~~堆优化版dijkstra
  7. 编程实现 无符号加法溢出判断
  8. Maven使用archetype迅速生成项目骨架
  9. hiho一下 第六十四周 Right-click Context Menu
  10. input中radio对象的使用、获取方法