qt自定义窗口,其绘制的窗口边框线显示不全
引言
自定义窗口,该窗口包含标题栏,默认整个窗口的边框线为蓝色,当点击该窗口的时候,窗口的边框线便为红色。程序在运行的时候,窗口的边框线只显示了左右两边的线,没有显示上下边的线。
示例
效果:
解决方法
针对上面窗口只显示左右两边,不显示上下两边,在改变边框线的宽度后线宽依旧没有变化,考虑到是窗口的内容遮住了边框线,于是在ui文件中重写调整绘制边框线的控件上面的窗口的大小,使绘制边框线的窗口上的窗口小于绘制边框线的窗口。这样绘制的边框线便不会被遮挡。
先看一下整个ui窗口的结构:
边框线在子控件backwidget上绘制的,并设置整个窗口LayoutShowForm为栅格布局,布局的上下左右边距均为0,这样backWidget与LayoutShowForm一样大小,在backWidget之上,进行垂直布局,将控件widget与titleWidget进行垂直布局,在titleWidget之中将namelabel进行了栅格布局,从而呈现上面所示的界面。
边框线在backWidget上绘制的,由于backWidget与LayoutShowForm一样大小,所以不能显示完整的边框线。这时需重新调整backWidget的栅格布局的上下左右边距,使该边距能正好显示出所设置的线宽,这样就能显示正常的边框线。下面是调整完backWidget的上下左右边距后的ui。
ui窗口如下图:
对应的ui的结构图还是没有变化,只是backWidget的栅格布局中设置了上下左右边距。之前所有的栅格布局边距都为0.
调整后的栅格布局的上下左右边距:
接下来,上代码,由于边框线是在子控件上绘制的,而并非直接在窗口LayoutShowForm上绘制,这里不能直接使用重绘函数,而必须使用事件过滤,首先在子控件backWidget上安装事件过滤:
ui->backWidget->installEventFilter(this);
接下来重写事件过滤:
bool LayoutShowForm::eventFilter(QObject *watched, QEvent *event)
{if (watched == ui->backWidget && event->type() == QEvent::Paint) {paintLayoutPreBoardLine(ui->backWidget);return true;}return false;
}
在事件过滤函数中实现绘制边框线:
void LayoutShowForm::paintLayoutPreBoardLine(QWidget *widget)
{QPainter painter(widget);//backWidgetQPen pen;pen.setWidth(3);pen.setColor(m_colorBorad);painter.setPen(pen);painter.setRenderHint(QPainter::Antialiasing);painter.drawRect(QRect(0,0,244,165));m_isSetBoardColor = false;qDebug()<<QStringLiteral("重绘边框色");
}
忘记一点当设置了backWidget的栅格布局的上下左右间距后,原本的垂直布局中的内容就会变小,读者可以根据项目需要来调整各控件的大小。
以上便可以实现边框线正常显示。
qt自定义窗口,其绘制的窗口边框线显示不全相关推荐
- 微信小程序苹果手机边框1rpx显示不全解决办法
微信小程序苹果手机边框1rpx显示不全,加上transform: rotateZ(360deg) .address-map{width: 125rpx;height: 36rpx;line-heigh ...
- qt creator在高分辨率笔记本上控件运行显示不全的问题解决方法
之前在学习qt的时候遇到的一个问题, 明明qt设计师上是没问题的,一运行就显示不全 解决方法很简单 在main第一行加上 QCoreApplication::setAttribute(Qt::AA_E ...
- qt自定义含有拖动功能的窗口在点击窗口的下拉列表时窗口移动
提要 自定义的弹出窗口,窗口可以实现按下鼠标拖动,鼠标释放停止拖动,窗口种含有子控件,下拉列表,在点击下拉列表时窗口移动. 解决方法 因为点击下拉列表的时候,触发了窗口的移动事件,所以添加下拉列表的事 ...
- vs矩形框边框线显示被选中的区域;_如何使用OpenCV可视化的截取感兴趣区域
OpenCV是一个著名的计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函数和少量 C++ 类构成,同时提供了Python ...
- vs矩形框边框线显示被选中的区域;_条形码区域解码:Web小工具
条形码解码首先要做定位,找到条形码在图像中的区域.但是有时候受图像质量影响,算法找寻的区域可能产生偏差,最后导致解码失败.这个时候,可以尝试手动选择区域,来辅助条形码的识别. Web Canvas框选 ...
- vs矩形框边框线显示被选中的区域;_Excel中,重复的数据高亮显示,如何快速删去?...
快速删去重复数据,雷哥在这里提供4种超简单的解决方法,大家一看就会. 为了更加直接明了地说明,雷哥在这里通过具体案例进行讲解. 案例:下图B列日期中,橘黄色部分是我们已经标记好颜色的重复项. 要求:快 ...
- html word表格边框变成表格,word表格边框显示不全跨页面显示的解决方法
word表格是很多伙伴常会使用到的一款办公软件,那你晓得边框显示不全跨页面显示如何处理吗?如若不了解的话,就看看下文word表格边框显示不全跨页面显示的解决方法吧. word表格边框显示不全跨页面显示 ...
- qt整个窗口上绘制矩形与在窗口的子控件上绘制矩形
引言 创建一个基于QDialog的项目,自动生成ui文件,此时再添加新文件,创建一个基于QWidget的ui类,此类具有自定义标题栏,让该自定义类显示在窗口Dialog上,一开始具有红色的边框线,且四 ...
- 【QT】QT从零入门教程(十一):QT自定义窗口
首先是借鉴了网上的博客,实现无边框,自由拖动的自定义窗口效果. #ifndef CUSTOMWINDOW_H #define CUSTOMWINDOW_H #include <QtGui&g ...
最新文章
- List复制:深拷贝和浅拷贝用法及区别
- BCH网络成功发布第一个商业级别的Token
- 勘误《iOS网络高级编程:iPhone和iPad的企业应用开发》
- 单例模式可以分为懒汉式和饿汉式: 懒汉式单例模式:在类加载时不初始化。 饿汉式单例模式:在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快。
- 【DB2】NVL2函数
- 2020 操作系统第二天复习(习题总结)
- 日常小记录json文件(json.load()、json.loads()、json.dump()、json.dumps())
- Pytorch在colab和kaggle中使用TensorBoard/TensorboardX可视化
- unity打包IOS填坑1
- 计算机技能大赛简讯内,【报道】2010学西城区职业高中计算机排版技能竞赛简讯...
- mysql密码expired_mysql密码过期的修改方法(your password has expired)
- python lncrna_超简便的国产lncRNA预测工具LGC
- linux驱动程序的测试,Linux驱动学习笔记(4)字符设备驱动测试
- WoS数据库使用及检索示例
- Caused by: hudson.plugins.git.GitException: Command “git fetch --tags --progress -- https://github.
- NAT以及基本配置(静态配置)
- Python数据处理之pandas基础入门
- java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100/虚拟机调优
- VMware虚拟机网络连接的3种方式
- 计算机相关分类号,中图法分类号(计算机专业) TP
热门文章
- 最佳实践|Spring Boot 应用如何快速接入 Prometheus 监控
- 2020-09-01
- 云原生基础架构的最佳状态,就是没有架构?
- 阿里云MaxCompute,用计算力让数据发声
- 华为庞鑫:闪存3.0时代,四大变化激发全闪存数据中心潜能释放
- 全流分析取证:高级威胁哪里跑?!
- 数据分析:为什么说Python比Excel更简单高效 ?
- 腾讯车联发布TAI3.0:三步实现汽车智能进化,2个月快速上车
- 老码农吐血建议:2020年,低于1w的程序员要注意了...
- 最新突破!科学家研发出世界首款精神控制手臂机器人;近日Kubernetes 1.15 正式发布;雷军公布小米手机产品线布局……...