首页 > 其他分享 >Qt开发经验小技巧266-270

Qt开发经验小技巧266-270

时间:2023-05-22 09:11:41浏览次数:70  
标签:Qt MEDIA 270 qputenv 266 BACKEND QT 下拉框 ffmpeg

  1. 从Qt6.4版本开始多媒体模块提供了ffmpeg作为后端解码使用(6.5版本默认就是ffmpeg),可以通过设置环境变量来更改使用哪种后端解码,在main函数的第一行 qputenv("QT_MEDIA_BACKEND", "ffmpeg"); 目前已知的问题是如果选用ffmpeg则暂时不支持中文目录以及中文名称,如果一定要支持中文则需要改成windows。
//设置后端解码为ffmpeg/所有系统都支持
qputenv("QT_MEDIA_BACKEND", "ffmpeg");
//windows系统专用
qputenv("QT_MEDIA_BACKEND", "windows");
//linux系统专用
qputenv("QT_MEDIA_BACKEND", "gstreamer");
//mac系统专用
qputenv("QT_MEDIA_BACKEND", "darwin");
//android系统专用
qputenv("QT_MEDIA_BACKEND", "android");
  1. 下拉框控件QComboBox默认会根据item的字符宽度调整下拉框的宽度,比如其中某个item文本很长,则下拉框会变的很宽,甚至把整个界面撑大看起来变形的感觉,有时候我们不希望是这样,有多个方法可以去掉,方法一就是设置下拉框的拉伸策略为QSizePolicy::Ignored,然后将下拉框放到一个容器中,保证容器布局中的其他控件都是有固定尺寸或者fix填充尺寸,这样下拉框就是默认自动拉伸的而且保证不会跟着item的宽度变宽。这个方法并不友好,因为需要调整容器布局中其他控件的拉伸策略,最佳方法就是设置 ui->comboBox->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon); ,当item宽度超过的时候中间部分会自动省略号显示,要的就是这个效果,为了使得整个全局都能应用,可以样式表设置 qApp->setStyleSheet("QComboBox{qproperty-sizeAdjustPolicy:AdjustToMinimumContentsLengthWithIcon}"); 即可,整个项目中所有下拉框都会自动应用这个策略。

  2. 用QSettings类保存float类型的时候,内容会变成 @Variant 开头的一个值,后面根本看不懂什么值,比如 1.0 = @Variant(\0\0\0\x87?\x80\0\0) 一个非常奇怪的值,这样的话如果想直接修改配置文件来更改参数就无从下手。有两个办法解决问题,办法一就是在写入值的时候强制转换成double类型数据即可,set.setValue("SaveVideoRatio", (double)SaveVideoRatio);,办法二就是将float参数类型改成double,比如 float SaveVideoRatio 改成 double SaveVideoRatio,推荐方法一,不用更改数据类型,就改动一行即可。在Qt6中彻底修复了这个问题,不需要转double。

  3. 大概从Qt5.12开始,新增了平台外观插件platformthemes,意味着打包发布的时候需要带上他才能应用系统层风格的外观样式,如果不带,在win上可能是windows2000风格的古老外观,看起来非常诧异。

  4. 有时候我们设置开机运行程序后,如果该程序用又用QProcess等方式调用了程序B,而程序B又需要读取目录下的配置文件,此时你会发现根本读取不到,因为开机后的默认目录不在可执行文件所在目录(如果我们是双击程序运行的那就不存在这个问题,会自动将可执行文件所在目录作为当前目录。)所以我们需要执行代码 QDir::setCurrent(qApp->applicationDirPath()); 主动设置当前目录在哪,告诉操作系统。QProcess中有个setWorkingDirectory本人也各种对比测试过,对开启启动后的程序调用QProcess无效,必须用QDir::setCurrent。

国内站点:https://gitee.com/feiyangqingyun
国际站点:https://github.com/feiyangqingyun

标签:Qt,MEDIA,270,qputenv,266,BACKEND,QT,下拉框,ffmpeg
From: https://www.cnblogs.com/feiyangqingyun/p/17419712.html

相关文章

  • Qt开发笔记-----基础篇
    1.1为什么要学QtQt是一个跨平台的C++图形用户界面应用程序框架Qt为应用程序开发者提供建立艺术级图形界面所需的所有功能Qt是完全面向对象的,很容易扩展,并且允许真正的组件编程(1)Qt发展史在讲解学习Qt的必要性之前,先来了解下Qt的发展历史:1991年,Qt最早由奇趣科技......
  • 5-20打卡:qt实现开启关闭窗口
    我想要实现:按下新建窗口,然后新建出一个窗口,这时按钮变成关闭窗口,然后我再点击关闭窗口按钮、那么新建的窗口关闭。//在Widget类里面声明一个QWidget的指针成员变量QWidget*w;Widget::Widget(QWidget*parent):QWidget(parent),ui(newUi::Widget){ui->set......
  • mqtt V3到mqtt V3.1的改变
    1.1.ChangesThefollowingarethechangesbetweenMQTTV3andMQTTV3.1:UsernameandpasswordcannowbesentwithaCONNECTpacketNewreturncodesonCONNACKpackets,forsecurityproblemsClarificationthatclientsarenotinformedofun-authorizedPUBL......
  • MQTT 3.1.1,值得升级的6个新特性
    前言以前看英文文章或资料,看完之后,摘要或者忘记。这一次选择感兴趣的MQTT3.1.1介绍文章资料,引文见文末,作为练手;非完全翻译,去除掉一些广告性描述,若侵权,请告知。在沉寂了四年之后,QTT3.1.1规范于2014年10月30号正式发布,与此同时MQTT3.1.1已成为OASIS(结构化信息标准促进组织)开放物......
  • MQTT协议笔记之连接和心跳
    前言本篇会把连接(CONNECT)、心跳(PINGREQ/PINGRESP)、确认(CONNACK)、断开连接(DISCONNECT)和在一起。CONNECT像前面所说,MQTT有关字符串部分采用的修改版的UTF-8编码,CONNECT可变头部中协议名称、消息体都是采用修改版的UTF-8编码。前面基本上可变头部内容不多,下面是一个较为完整的......
  • Qt for Mobile程序设置启动图片
    QtforMobile默认是用了一张纯黑的图片作为程序启动图片,所以一开始程序启动时会出现1到几秒的黑屏,机器越慢,这个时间越长,比较不美观,我们可以自己动手设置上适合的图片。移动app的启动图片在iOS上叫launchimage,在Android上叫splashscreen,在istkani上都用上了。在iOS上传统的做法,可......
  • QT 字符串和数字拼接 QString int 拼接 显示在 label 标签中
    变量:i=0;拼接后显示到界面的label标签中。方法一:QStringsucc=QString("连接成功:%1").arg(i++);ui->label->setText(succ);方法二:QStringsucc=QString("%1%2").arg("连接成功:").arg(i++);ui->label->setText(succ);效果......
  • AT_abc_270_d 总结
    题目:AT_abc_270_d链接:洛谷,AT,vjudge题意有两个人轮流取石子,有\(n\)颗石子和长度为\(k\)的数组\(a\),每次取石子的人可以取走\(a_i\)颗石子,当然当时剩下的石子数量要$\gea_i$才行,若二人都走最优策略,那么先手可以取走都少颗棋子?数据范围:\(1\len\le10^4,1\l......
  • AT_abc270_f 总结
    题意有\(n\)个岛屿,可以分别花\(x_i,y_i(1\lei\len)\)的代价在岛屿\(i\)建一个机场和港口,一个花\(z_i(1\lei\lem)\)的代价在\(a_i,b_i\)之间建一条双向道路。若\(x\)和\(y\)都有机场或港口或者有道路相连,那么\(x\)和\(y\)是联通的,问要花至少多少代价......
  • ESP8266串口WiFi模块简单了解
    ESP8266简介ESP8266是一款超低功耗的UART-WiFi透传模块,拥有业内极富竞争力的封装尺寸和超低能耗技术,专为移动设备和物联网应用设计,可将用户的物理设备连接到Wi-Fi无线网络上,进行互联网或局域网通信,实现联网功能。ESP8266是上海乐鑫信息科技设计的低功耗WiFi芯片,集成完整的TCP/IP......