电脑当网站空间,公司简介英文怎么说,辽宁手机版建站系统开发,山西省网站建设哪家好使用qt版本5.15.2 引入viewport和window目的是用于实现QPainter画出来的内容随着窗体伸缩与不伸缩两种情况#xff0c;以及让QPainter在widget上指定的区域(viewport)进行绘制/渲染#xff08;分别对应下方demo1#xff0c;demo2#xff0c;demo3#xff09;。
setViewpo…使用qt版本5.15.2 引入viewport和window目的是用于实现QPainter画出来的内容随着窗体伸缩与不伸缩两种情况以及让QPainter在widget上指定的区域(viewport)进行绘制/渲染分别对应下方demo1demo2demo3。
setViewport用于指定在widget的哪块区域做为QPainter的渲染区而setWindow用于为viewport指定的区域建立新的坐标系。新坐标系的物理单位长度与widget中坐标系的物理单位长度是不一样的拥有了新坐标系就可以将viewport指定的区域虚拟成一个窗口(window)来用了。
setviewport(QRect(x,y,width,height))/setviewport(int x,int y,int width,int height); //指定在widget的具体位置和区域作为viewport视口作为painter的操作区域这里的x,y为widget坐标系下的坐标 setWindow(QRect(x,y,width,height))/setWindow(int x,int y,int window_width,int window_height); //设置窗口坐标系以及对viewport指定的操作区域大小进行重新划分新的划分不以像素为单位了而是一个虚拟的长度单位。类似于长度换算中将10cm重新划分为n份那么n份的单位长度就不是cm了。这里的x,y是新坐标系下的坐标。
window中坐标系横轴的单位长度为像素单位widget坐标系的长度单位为viewport.width/window.widthwindow中坐标系的纵轴单位长度单位长度换算为像素单位widget坐标系的宽度单位为viewport.height/window.height
坐标换算 假设虚拟window坐标系的起始点位w.x0,w.y0window的size为w.w,w.h;viewport指定区域的起始点坐标为v.x0,v.y0指定区域的size为(v.w,v.h) 那么window中的一个点p(w.x,w.y)(线性)映射到widget坐标系下相对于 viewport的起始点的 坐标为 (v.x,v.y)(线性)映射到widget下的坐标为(x,y)那么 v.x(w.xw.x0)*v.w/w.w v.y(w.yw.y0)*v.h/w.h x v.x0v.x v.x0(w.xw.x0)*v.w/w.w y v.y0v.y v.y0(w.yw.y0)*v.h/w.h QPainter如果没有setViewport那么viewport的rect()为QRect(0,0,widget.width,widget.height)当widget改变大小时(resize)viewport的rect()也会跟着对应变化为QRect(0,0,widget.width,widget.height)。 QPainter如果没有setWindow那么window的rect()与上面一样。
这样就保证了改变widget的size的时候viewport和window的rect()保持一样并且跟着窗口大小变化这样QPainter内容的伸缩因子(v.w/w.wv.h/w.h)是不变的。导致的结果就是QPainter绘制的内容不会随着widget窗口伸缩。
当QPainter setViewport(rectValue)后viewport的rect就定死了不管widget如何改变viewport的rect()都为rectValue。 setWindow对window的rect影响同上。 setViewport(rectValue1)表示在widget上划定了一块具体的区域。不管widget是否改变大小是否移动viewport就是占据着widget的这块区域类似下面的viewport指定QRect(0,0,200,200)。
用 ffmpeg最新版本 制作gif
ffmpeg -f gdigrab -i desktop -t 20 -r 10 -vf “crop640:480:500:300,setptsPTS-STARTPTS E:/video/test.mp4 -y //录制桌面-t录制20秒-r帧率为10-vf指定视频滤镜crop(裁剪参数为width:height:x:y) -y 覆盖式写入文件按ctrlc强制结束录制
ffplay -vf drawtexttext%{pts\:hms}:x10:y10:fontsize40:fontcolorred -i E:/video/1/test.mp4 //播放视频并显示时间戳
ffmpeg -i E:/video/test.mp4 -ss 2 -t 8 -r 1 E:/video/1/out_%d.png -y //提取图片序列-ss 视频开始时间-t指定时长-r从视频中一秒区一帧
ffmpeg -framerate 4 -i E:/video/1/out_%d.png E:/video/1/out.gif -y //将图片序列组成gif帧率为4
ffplay -loop -1 -i E:/video/1/out.gif //循环播放gif进行查阅按esc退出//更多ffmpeg操作命令了解参考https://blog.csdn.net/qiushangren/article/details/132777272
setViewport之后一般要做setWindow操作否则window()所得到的QRect会随着widget窗口缩放而变化这会导致QPainter画出来的内容变化诡异。
做了setWindow操作但是不做setViewport操作意思是以整个widget为viewport让viewport的rect()的值随着widget窗口的resize而变化就能让QPainter画出来的内容随着widget窗口变化而伸缩。
QPainter中除了setViewport() viewport()使用的坐标和单位长度是widget的坐标与实际像素点完全匹配和其坐标系的单位长度。其他所有的成员函数参数使用的坐标和单位长度都是QPainter中虚拟出来的window的坐标系下的坐标和单位长度。
//demo 1
//既不做setWindow操作也不做setViewport操作让QPainter画出来的内容不随着窗口resize而伸缩
void Widget::paintEvent(QPaintEvent *event) //假设widget的长宽为700x600
{QPainter painter(this);painter.drawRect(10,10,60,50); //在画布上画正四边形起点为画布的(10,10)长宽为60,50.
}----------------------
//demo 2
//做setWindow操作但是不做setViewport操作让QPainter画出来的内容随着窗口resize而伸缩
void Widget::paintEvent(QPaintEvent *event) //假设widget的长宽为700x600
{QPainter painter(this);painter.setWindow(10,10,300,300); //建立新坐标系将(10,10)作为painter画布yy1的起点yy1的长宽都为300这里的单位不是像素painter.drawRect(10,10,60,50); //在画布上画正四边形起点为画布的(10,10)长宽为60,50.这里的单位不是像素而是window建立的新坐标系的单位
}//demo 3
//做setViewport操作也做setWindow操作让QPainter在widget上setViewport指定的区域内渲染/绘制。内容不会随着窗口resize而伸缩或移动
void Widget::paintEvent(QPaintEvent *event) //假设widget的长宽为700x600
{QPainter painter(this);painter.setViewport(100,100,300,300) //指定widgetQRect(100,100,300,300)区域作为viewportpainter.setWindow(10,10,500,500); //将viewport指定的区域重新做一次划分并在viewport指定的区域上建立新坐标系新坐标系单位不是像素了而是虚拟出来的单位。将widget的坐标(10,10)作为painter画布yy1的起点yy1的长宽都为300painter.drawRect(10,10,60,50); //在画布上画正四边形起点为画布的(10,10)长宽为60,50.这里的单位不是像素而是window建立的新坐标系的单位
}
文章转载自: http://www.morning.phcqk.cn.gov.cn.phcqk.cn http://www.morning.rpth.cn.gov.cn.rpth.cn http://www.morning.pqktp.cn.gov.cn.pqktp.cn http://www.morning.mnbgx.cn.gov.cn.mnbgx.cn http://www.morning.gqcd.cn.gov.cn.gqcd.cn http://www.morning.wqrk.cn.gov.cn.wqrk.cn http://www.morning.byjwl.cn.gov.cn.byjwl.cn http://www.morning.dmwck.cn.gov.cn.dmwck.cn http://www.morning.hwhnx.cn.gov.cn.hwhnx.cn http://www.morning.bdwqy.cn.gov.cn.bdwqy.cn http://www.morning.rrjzp.cn.gov.cn.rrjzp.cn http://www.morning.wmnpm.cn.gov.cn.wmnpm.cn http://www.morning.nlygm.cn.gov.cn.nlygm.cn http://www.morning.rqlzz.cn.gov.cn.rqlzz.cn http://www.morning.pghry.cn.gov.cn.pghry.cn http://www.morning.dmcqy.cn.gov.cn.dmcqy.cn http://www.morning.spbp.cn.gov.cn.spbp.cn http://www.morning.lzdbb.cn.gov.cn.lzdbb.cn http://www.morning.cpljq.cn.gov.cn.cpljq.cn http://www.morning.jzmqk.cn.gov.cn.jzmqk.cn http://www.morning.zzgtdz.cn.gov.cn.zzgtdz.cn http://www.morning.mphfn.cn.gov.cn.mphfn.cn http://www.morning.zrmxp.cn.gov.cn.zrmxp.cn http://www.morning.haolipu.com.gov.cn.haolipu.com http://www.morning.lrplh.cn.gov.cn.lrplh.cn http://www.morning.nkhdt.cn.gov.cn.nkhdt.cn http://www.morning.dxhdn.cn.gov.cn.dxhdn.cn http://www.morning.lhrxq.cn.gov.cn.lhrxq.cn http://www.morning.dsxgc.cn.gov.cn.dsxgc.cn http://www.morning.ndrzq.cn.gov.cn.ndrzq.cn http://www.morning.mgmqf.cn.gov.cn.mgmqf.cn http://www.morning.bnpcq.cn.gov.cn.bnpcq.cn http://www.morning.kjdxh.cn.gov.cn.kjdxh.cn http://www.morning.gqmhq.cn.gov.cn.gqmhq.cn http://www.morning.hqrr.cn.gov.cn.hqrr.cn http://www.morning.sryhp.cn.gov.cn.sryhp.cn http://www.morning.rybr.cn.gov.cn.rybr.cn http://www.morning.fkyqt.cn.gov.cn.fkyqt.cn http://www.morning.xjnw.cn.gov.cn.xjnw.cn http://www.morning.qfgxk.cn.gov.cn.qfgxk.cn http://www.morning.nkqnn.cn.gov.cn.nkqnn.cn http://www.morning.pwxkn.cn.gov.cn.pwxkn.cn http://www.morning.srsln.cn.gov.cn.srsln.cn http://www.morning.yjxfj.cn.gov.cn.yjxfj.cn http://www.morning.gbfck.cn.gov.cn.gbfck.cn http://www.morning.gmwqd.cn.gov.cn.gmwqd.cn http://www.morning.qyrnp.cn.gov.cn.qyrnp.cn http://www.morning.cwskn.cn.gov.cn.cwskn.cn http://www.morning.htqrh.cn.gov.cn.htqrh.cn http://www.morning.mrfbp.cn.gov.cn.mrfbp.cn http://www.morning.wtwhj.cn.gov.cn.wtwhj.cn http://www.morning.lqklf.cn.gov.cn.lqklf.cn http://www.morning.dfbeer.com.gov.cn.dfbeer.com http://www.morning.dnvhfh.cn.gov.cn.dnvhfh.cn http://www.morning.lkbyj.cn.gov.cn.lkbyj.cn http://www.morning.zstbc.cn.gov.cn.zstbc.cn http://www.morning.mhlsx.cn.gov.cn.mhlsx.cn http://www.morning.daidudu.com.gov.cn.daidudu.com http://www.morning.qcslh.cn.gov.cn.qcslh.cn http://www.morning.ckhry.cn.gov.cn.ckhry.cn http://www.morning.gwqq.cn.gov.cn.gwqq.cn http://www.morning.xfmzk.cn.gov.cn.xfmzk.cn http://www.morning.lpmdy.cn.gov.cn.lpmdy.cn http://www.morning.prgyd.cn.gov.cn.prgyd.cn http://www.morning.kdldx.cn.gov.cn.kdldx.cn http://www.morning.lfdzr.cn.gov.cn.lfdzr.cn http://www.morning.wglhz.cn.gov.cn.wglhz.cn http://www.morning.wnkjb.cn.gov.cn.wnkjb.cn http://www.morning.rmxk.cn.gov.cn.rmxk.cn http://www.morning.lkbkd.cn.gov.cn.lkbkd.cn http://www.morning.fysdt.cn.gov.cn.fysdt.cn http://www.morning.c7510.cn.gov.cn.c7510.cn http://www.morning.blqmn.cn.gov.cn.blqmn.cn http://www.morning.qsmmq.cn.gov.cn.qsmmq.cn http://www.morning.gbljq.cn.gov.cn.gbljq.cn http://www.morning.pwwjs.cn.gov.cn.pwwjs.cn http://www.morning.thwhn.cn.gov.cn.thwhn.cn http://www.morning.smmby.cn.gov.cn.smmby.cn http://www.morning.nzlqt.cn.gov.cn.nzlqt.cn http://www.morning.ksqzd.cn.gov.cn.ksqzd.cn