painter

Qt编写安防视频监控系统29-掉线重连

自古美人都是妖i 提交于 2020-08-15 05:33:35
一、前言 掉线重连在很早很早以前就做了,基本上的方法都是搞个变量存储最后收到图片的时间,然后开个定时器判断,如果不在暂停模式下,当前时间和最后收到图片的时间差值超过了设定的超时时间,比如5s则认为掉线,然后调用close方法关闭,调用open重新打开视频流,依次重复。 最开始做的时候就发现如果这个最后收到图片的时间更新在视频流控件的widget中,时间久了会假死,明明还在绘制中,但是此时间不会更新,网上也看到有些人遇到了类似的问题,后面把此变量移到解码采集线程中,才正常,正确的做法也是必须放到采集线程才是对的,毕竟硬解码opengl显示以后,和painter就没啥关系了,或者视频流交给句柄以后,也跟painter没啥关系,必须从源头处理才对。 视频流控件自带了自动重连的机制,这样用户再使用的时候不用管如何重连,只需要开启自动重连属性即可,默认开,还有一种情况可能要关闭自动重连属性,比如播放本地视频文件,有时候只需要播放一次就行,不需要播放完成以后又重新播放,如果确实需要,则关联播放完毕信号自行重新open即可。 在具体的使用过程中发现,在视频监控系统中,比如有16个通道,如果自动重连在单个的视频流控件中,则会出现一种情况,网络断了,然后又恢复了,则16个通道很可能在同一时间瞬间恢复,此时CPU和内存暴增,甚至出现过程序崩溃的情况,那怎么搞呢

Qt开源作品31-屏幕截图控件

只谈情不闲聊 提交于 2020-08-14 04:07:49
一、前言 屏幕截图控件在我的很多项目中都有用到,尤其是嵌入式的系统上的软件,因为在嵌入式系统中,基本上系统都很精简,甚至连UI都没有,开机之后直接运行的就是Qt程序,很多时候需要对软件进行截图保存下来,用来编写文档和介绍,还有产品彩页之类的,毕竟在板子上直接运行的效果是最好的,还有一种办法是将系统编译成win的版本,用系统的截图来,但是嵌入式上很多代码其实很不方便在win上运行,甚至没法运行,而且还要外接很多接口来得到真正的运行效果,所以还是采用直接在板子上的Qt程序中直接集成截图的功能,需要的时候直接鼠标右键弹出来选择即可。 二、代码思路 ScreenWidget::ScreenWidget(QWidget *parent) : QWidget(parent) { //this->setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint); menu = new QMenu(this); menu->addAction("保存当前截图", this, SLOT(saveScreen())); menu->addAction("保存全屏截图", this, SLOT(saveFullScreen())); menu-

「赛前备战」NOIp2020-提高 动态规划训练

大城市里の小女人 提交于 2020-08-13 18:04:46
博主太菜,可能会炸联赛,于是恶补一下 QAQ 题目比较基础,动态更新 Tags 仅包含 提高组 内容。 类型: 区间 dp , 背包 dp , 树形 dp , 状压 dp , 计数 dp , 数位 dp , 概率/期望 dp , 环形 dp , 基环树 dp 。 优化: 单调栈/单调队列 优化 , 其他数据结构 优化 , 斜率 优化 , 倍增 优化 Summarize 简单总结了部分基础类型的 dp 以及一些优化。 区间 dp 基础状态: \(f(l, r)\) 表示区间 \([l, r]\) …… 基础转移模型示例: \(f(l,r) = \min\limits_{k}\{f(l, k) + f(k+1, r)+\cdots\}\) 。 基本实现:枚举区间长度,枚举左端点并计算出右端点,枚举断点。或者直接记搜。 树形 dp 树上动态规划。 基础状态: \(f(x, \cdots)\) 表示以 \(x\) 为根的子树…… 由于树的递归性质,基本用 Dfs 实现。 状压 dp 常见于元素个数较少的情况。 基础状态: \(f(S, \cdots)\) 表示以 \(x\) 为根的子树…… 集合使用二进制、位运算的思想压缩成一个整数并进行判断或转移。 计数 dp 常用于统计方案数。 设计状态是重点,转移看题意。 可能有一些组合计数的知识。 数位 dp 常见情况:统计值域在 \([a, b]

53.Qt-QPdfWriter绘制PDF,支持表单输出

感情迁移 提交于 2020-08-13 02:22:33
之前打印PDF都是通过html形式来实现的,但是这次要做的东西,需要打印界面控件,所以需要使用QPdfWriter. 通过QPdfWriter来获取QPainter对象,就能实现在PDF上来画画啦. 代码生成的PDF如下所示: 代码效果如下所示: 代码如下所示: //通过dialog来保存PDF路径 QString mainWindow::pdfSaveAs(QString fileName) { QString file = "" ; file = QFileDialog::getSaveFileName ( this , // 父组件 " 另存为 " , // 标题 QString( " %1/%2 " ).arg(QStandardPaths::writableLocation(QStandardPaths::DesktopLocation)).arg( "" +fileName+ " .pdf " ), // 设置路径, .表示当前路径,./表示更目录 " PDF文件 " , // 过滤器,保存的类型 Q_NULLPTR, QFileDialog::ShowDirsOnly); return file; } // y:表单的Y坐标 // horzBorder:水平外边距,写0表示没有边距 // row,column:行数和列数 // unitHeight:单元高度 //

QT 基本图形绘制

≡放荡痞女 提交于 2020-08-12 14:39:06
QT 基本图形绘制 1.告诉绘制引擎一些东西 QPainter::Antialiasing 在可能的情况下,反锯齿 QPainter::TextAntialiasing 在可能的情况下,文字反锯齿 QPainter::SmoothPixmapTransform 采用平滑的Pixmap变换算法 2.绘制函数 3.风格 1)画刷风格 2)画笔风格 3)画笔连接点风格 4)顶端风格 4.绘图前的准备 1 如果要在绘图设备(一般为窗口部件)上绘图,只需创建一个QPainter,再将指针传到该设备中。 例如: void MyWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); } 2 常用的初始化:画笔、画刷、字体 画笔:用来画线和边缘。它包含颜色、宽度、线性、拐点风格以及连线风格。 画刷:用来填充几何图形的图案。它一般由颜色和风格组成,但同时也可以是纹理(一个不断重复的图像)或者是一个渐变。 字体:用来绘制文字。字体有很多属性,包括字体族和磅值大小。 5.具体的实例 通过建立一个画图面板来了解Qpainter是怎样绘制图形的,其中包含两个类,画图的区域PainterArea类和主窗口mainWindow类 (1)实现PainterArea类 //paintarea.h #ifndef PAINTAREA_H

从《上瘾》到 《不被干扰》

一曲冷凌霜 提交于 2020-08-11 19:12:10
忘了在哪里看到说《上瘾》的作者出了本新书教人如何控制自己的注意力并选择自己的生活,感觉很有意思,亚马逊看了下是 2019 年出的新书,好像还没中文版 https://www.amazon.com/Indistractable-Nir-Eyal-Julie-Li-audiobook/dp/B07SV4V6ZK/ 作者一本书教如何让别人上瘾,一本书教人如何摆脱上瘾。左右互搏,哈哈 让别人上瘾,而让自己控制注意力的这一行为,让我想到张一鸣和他的字节跳动,推荐看下这篇文章 抖音设局:张一鸣的“延迟满足”和大众的及时行乐 [1] 高智商、高自律的人做普罗大众的生意,是一件可怕的事。张一鸣身上有“机器人”般的理性和克制,信奉“延迟满足感”,在很多即刻享乐的关头,会选择克制,但他也明白,这种克制不是所有人都能做到的,或者说,一般人很少能做到。 深谙人性弱点的精英,在“延迟满足感”中飞速进化,却在做着没有延迟满足感、常常围绕一个东西转的大多数人的生意,比如,今日头条和抖音。这些精英在千变万化的世界中抓住了一些不变的规律,他们选择做归属于自己的人,受苦受难,追求真实的幸福和自由的快乐,却希望其他人都是“快乐狗”和“寻求刺激的小鼠”。 张一鸣把人划分为两类: 活在现实中的少数精英和围绕着一个东西转的大部分人。 他表示,“少数精英追求效率,实现自我认知,他们活在现实中。但大部分人是需要围绕一个东西转的

项目实战:Qt手机模拟器拉伸旋转框架

*爱你&永不变心* 提交于 2020-08-09 18:51:53
若该文为原创文章,未经允许不得转载 原博主博客地址: https://blog.csdn.net/qq21497936 原博主博客导航: https://blog.csdn.net/qq21497936/article/details/102478062 本文章博客地址: https://blog.csdn.net/qq21497936/article/details/106817346 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门) Qt开发专栏:项目实战(点击传送门) Qt开发专栏:开发技术(点击传送门) <br> 需求   手机模拟器伸缩旋转框架,中间为容器区域预留,给手机模拟器; <br> 目标效果    <br> 功能   1.四个角鼠标图标切换,并且点击可拉伸;   2.手机框区域,鼠标点击可以拽托;   3.透明窗口的使用;   4.横竖屏的切换,,使用F1功能键; <br> 原理   使用QRegion和QRect对鼠标区域进行判断;   使用QPainter进行绘制;   使用qss定制按钮样式;   对QWidget的paintEvent和resizeEvent使用; <br> 涉及技术博文   《 Qt实用技巧

Qt开源作品18-无边框背景透明窗体

蹲街弑〆低调 提交于 2020-08-09 13:59:04
一、前言 用Qt来做无边框北京透明窗体非常简单,根本不需要用什么系统层的API来实现透明什么的,Qt本身提供了很多种设置窗体透明的方法,除了可以设置窗体的属性为透明以外,还可以设置透明度函数,以及qss来设置透明度颜色等,方法很多,按照需要可以选用自己最合适的办法,如果想要整个窗体的背景图类似于无边框的异行,你只需要准备一张美工做好的png带透明的背景图即可,直接用qss的形式设置为窗体的背景图,你也可以用painter绘制上去,这样就可以产生各种奇形怪状的异行窗体,比如中间挖个洞的背景图,可以直接穿透桌面。 二、代码思路 Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); this->setAttribute(Qt::WA_TranslucentBackground); this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint); ui->widget->installEventFilter(this); ui->widget->setStyleSheet(QString("background-image

Qt自定义控件之仪表盘2--QPaint绘制仪表盘

余生颓废 提交于 2020-08-06 07:59:26
0、前言 前面一篇文章写道了仪表盘的特点,实现了一个贴图的仪表盘,属于低配版本的仪表盘。 主要是有任何改动时候就需要重新设计图片,不能适配不同控件大小,即使让它自由拉伸,但仪表盘放大缩小时候显示效果会变差。这篇文章设计了一个自己绘制的仪表盘,有背景表盘,刻度线、刻度值,指针,以及动态运行效果。 1、demo顶层设计 设计2个控件,1个widget提升为Mydial仪表盘控件,一个滑动条控件,来测试仪表盘指针旋转效果用。 代码调用,绑定滑动条信号到仪表盘的槽函数即可。 #include " widget.h " #include " ui_frmwidget.h " #include <QDebug> Widget::Widget(QWidget * parent) : QWidget(parent) , ui( new Ui::Widget) { ui ->setupUi( this ); connect(ui ->horizontalSlider, &QSlider::valueChanged, ui->dial, & MyDial::valueChanged); } Widget:: ~ Widget() { delete ui; } 2、绘制仪表盘 绘制背景图,绘制表盘圆圈。 void MyDial::drawBg(QPainter * painter) { int r =

第六十七课、基础图形绘制(中)------------------狄泰软件学院

陌路散爱 提交于 2020-08-05 16:56:50
一、基础图形绘制 1、Qt图形系统中的坐标系 (1)、物理坐标系(设备坐标系) A、原点(0,0)在 左上角的位置 ,单位:像素(点) B、x坐标向右增长,y坐标向下增长 (2)、逻辑坐标系(如数学中的坐标系) A、 数学模型中的抽象坐标系, 单位由具体问题确定 B、坐标的增长方向 由具体问题决定 2、一些事实 (1)、 QPainter 使用 逻辑坐标系 绘制图形 (2)、逻辑坐标系中图形点大小和位置经 由转换后绘制于具体设备 (3)、 默认情况下 的 逻辑坐标系与物理坐标系完全一致 3、视口与窗口(站在不同的角度看待同一个矩形) (1)、 视口:物理坐标系中 一个任意指定的矩形 (2)、 窗口:逻辑坐标系下 对应到物理坐标系中 相同的矩形 4、深入理解视口与窗口 (1)、视口与窗口是 不同坐标系中的同一个矩形 (2)、视口与窗口中的 坐标点存在一一映射的关系 (3)、窗口与视口能够 通过坐标转换而互相转换 5、视口与窗口的变换方法 (1)、 定义视口(setViewport) :左上角坐标,右下角坐标,计算宽度和高度 (2)、 定义窗口(setWindow) :左上角坐标,右下角坐标,计算宽度和高度 (3)、一般做法时,先挖一个视口出来,然后在挖出来的视口上重新定义坐标系就成为窗口了 void Widget::paintEvent(QPaintEvent * ) {