Qt/C++开发经验小技巧306-310
远程过很多人电脑远程分析问题,发现一个通病,比如明明修改了某个数据库或者配置文件,结果运行程序一看,还是旧的数据,死活都不行,查了半天程序,始终找不到问题所在。最终查到原来是程序读取的文件根本不是修改过的文件,因为用户电脑环境中有好几份同样的代码目录,他打开的目录是另外一份,无论怎么修改,其实都是和当前程序无关的,根本没有改对地方。大数据统计,这种情况还真不少,至少占五分之一的比例。有好几份拷贝的情况很多时候避免不了,比如为了临时备份代码,以便测试新的代码。但是务必记得当前项目做过拷贝,遇到问题的时候先检查目录是否正确,是否是当前打开的项目代码所在目录。
在使用第三库的过程中,当你使用的库种类越多,会发现一个现象,有些库依赖编译器的,比如opencv,如果你用msvc编译出来的库,那你的程序只能用msvc的套件才能正常链接该库,你要是用mingw去链接肯定失败的,要想用mingw也能成功链接,你只能用mingw去编译opencv。到这里你是不是以为都是这个规则?那就错了,当你用ffmpeg的库的时候,就不存在这个问题,官方下载的库文件,既能用msvc也能用mingw去链接。这是因为ffmpeg是纯c项目,而opencv是纯c++项目,涉及到ABI的问题,这是C++的特性导致的。C++是一种复杂的编程语言,支持继承和多态,因此编译器要想保证准确调用函数,就需要确定其调用约定(函数名区分、参数输入、栈管理等)、返回类型及参数列表。在同一种架构下不同编译器对此导出的规则不一致。所以总结就是,纯c的项目编译出来的库不用区分编译器,纯c++的需要区分。qtav作者有个最新力作mdk项目,也是纯c写的,提供了mingw和msvc的库,无论何种编译器编译出来的库,都同时兼容msvc和mingw编译器,这就是纯c的魅力。
有时候我们需要写入文件到磁盘,但是有些情况下,如果对应目录不存在则写入失败,需要先判断目录是否存在,不存在则新建,QDir提供了mkdir和mkpath两种方法来创建目录,以前以为这两个是一样的功能,类似于size和length,其实不是的,直到近期才发现了区别。mkdir只会创建路径中的最末尾的目录,如果父目录不存在,则创建失败。而mkpath会逐级判断整个路径的目录,父目录不存在则创建父目录,依次下去,保证指定的路径创建成功,建议使用mkpath。
QDir dir;
//如果path目录不存在则dir目录也会创建失败
dir.mkdir("f:/path/dir");
//会先创建path目录然后创建dir目录
dir.mkpath("f:/path/dir");
当你在widget项目中将js文件添加到资源文件中,编译的时候很可能出现 qmlcache_loader.o:qmlcache_loader.cpp:(.text+0x32) 错误,这是因为qtc默认会开启qtquickcompiler,以便通过预处理资源中的所有js文件,加快文件加载到Qml引擎的速度,但是有些时候我们并不是用它加载到qml运行,可能是放在QtWebEngine中用于交互,或者widget中执行js函数拿到结果。可以在qtc的项目配置中找到qt quick compiler选项,下拉框选择禁用。也可以在pro中加一行 CONFIG -= qtquickcompiler 即可。这个确切的说是qt的bug,在5.15.2以及后续版本不存在。
新版的QtCreator默认的编译目录路径在源码下build目录,之前是在源码同级的build-xxx目录,个人还是喜欢之前的方式,所有编译生成的临时文件在源码外单独的一个目录,不需要的时候直接删除就好,源码目录永远干干净净的。当然qtc也是提供了设置目录的地方,在首选项-》构建和运行-》Default Build Properties 里面第一行,将之前的 ./build/%{Asciify:%{Kit:FileSystemName}-%{BuildConfig:Name}} 改成 ../build-%{Project:Name}-%{Kit:FileSystemName}-%{BuildConfig:Name} 即可。

Qt/C++开发经验小技巧306-310的更多相关文章
- Qt开发经验小技巧81-90
Qt中的QColor对颜色封装的很完美,支持各种转换,比如rgb.hsb.cmy.hsl,对应的是toRgb.toHsv.toCmyk.toHsl,还支持透明度设置,颜色值还能转成16进制格式显示. ...
- Qt开发经验小技巧61-70
很多人问Qt嵌入式平台用哪个好,这里统一回答(当前时间节点2018年):imx6+335x比较稳定,性能高就用RK3288 RK3399,便宜的话就用全志H3,玩一玩可以用树莓派香橙派. 对于大段的注 ...
- Qt开发经验小技巧41-50
如果使用sqlite数据库不想产生数据库文件,可以创建内存数据库. QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); ...
- Qt开发经验小技巧71-80
在我们使用QList.QStringList.QByteArray等链表或者数组的过程中,如果只需要取值,而不是赋值,强烈建议使用 at() 取值而不是 [] 操作符,在官方书籍<C++ GUI ...
- Qt开发经验小技巧51-60
在某些http post数据的时候,如果采用的是&字符串连接的数据发送,中文解析乱码的话,需要将中文进行URL转码. QString content = "测试中文"; Q ...
- Qt开发经验小技巧31-40
代码判断MSVC编译器版本. if (_MSC_VER == 1800) MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015) MSVC++ 12.0 _ ...
- Qt开发经验小技巧21-30
如果出现Z-order assignment: is not a valid widget.错误提示,用记事本打开对应的ui文件,找到为空的地方,删除即可. 善于利用QComboBox的addItem ...
- Qt开发经验小技巧11-20
获取类的属性 const QMetaObject *metaobject = object->metaObject(); int count = metaobject->propertyC ...
- Qt开发经验小技巧1-10
当编译发现大量错误的时候,从第一个看起,一个一个的解决,不要急着去看下一个错误,往往后面的错误都是由于前面的错误引起的,第一个解决后很可能都解决了. 定时器是个好东西,学会好使用它,有时候用QTime ...
- Qt开发之Hello Qt及学习小技巧
创建第一个Qt程序的简单流程 如果安装了andriod或ios的版本也会显示出来,这里只显示了桌面端的 一个项目文件代码结构如下: 如下图可直接编辑label里的文字内容: 运行结果:(快捷键ctrl ...
随机推荐
- 封神台 SQL注入 靶场 (猫舍)手动注入
封神台 SQL注入 靶场 (猫舍)手动注入 靶场地址 http://pu2lh35s.ia.aqlab.cn/?id=1 使用脚本 可以直接使用sqlmap脚本 直接 对这个地址进行测试 不过这样实在 ...
- 妙用编辑器:使用Notepad--的标记颜色功能更高效的阅读日志文件
应用场景 在日常维护工作中,经常需要查看一些日志,以判断系统的运行状态或者进行问题定位,当系统出现故障时,一般都会有特殊的关键字,但对于浩如烟海的日志来说,识别这些关键字信息还是非常费眼力的,比如有如 ...
- 云原生动态周刊:你订阅 GitHub README 播客了吗?
云原生一周动态要闻: Apache Kafka 3.0.0 发布 Deis Labs 推出 WebAssembly PaaS 平台 Hippo Mirantis Flow 将数据中心重塑为云原生系统 ...
- 云原生爱好者周刊:KubeSphere 3.3.0 Alpha 版发布
开源项目推荐 Collection of Linux eBPF slides/documents 这个项目收集了各种与 eBPF 相关的资料,非常全面. magic-trace magic-trace ...
- 指针进阶(回调函数)(C语言)
目录 1. 回调函数是什么? 2. qsort 使用 2.1 使用qsort函数排序整形数据 2.2 使用qsort排序结构数据 3. qsort函数的模拟实现 1. 回调函数是什么? 回调函数就是一 ...
- Oracle HR样例数据库建立
在视频的学习过程中,老师用到了HR样例数据库,但是我发现我的样例数据库中没有HR样例数据库,可能是在安装的时候漏掉了哪个环节,所以只能补救一下 如何判断自己是否有HR样例数据库呢?操作代码如下所示 第 ...
- DearPyGui学习
1.所有DPG应用程序必须做3件事: 创建和销毁上下文 (create_context) 创建和显示视区 (create_viewport.show_viewport) 设置和启动DearPyGui ...
- 用“tar | split ”将文件分包压缩
1.一次打包: tar cjf - directory/ | split -b 100m -d -a 1 - filename.tar.bz2. (directory/):待压缩的目录名. (spli ...
- .NET 8.0 通用管理平台,支持模块化、WinForms 和 WPF
前言 领导要求做一个小项目,要求独立运行,用以最少的依赖,此时不想集成到主项目中,但是又想用HzyAdmin中如此好用的自动注入,还有操作简单的仓储模式,话不多说,直接开干. HzyAdmin 是一个 ...
- The 2024 ICPC Asia East Continent Online Contest (II) K.Match
题面 K.Match 给定长度为 \(n\) 的两个序列 \(a\) 和 \(b\),当且仅当 \(a_i ⊕ b_j ≥ k\) 时,\(a_i\) 与 \(b_j\) 连一条双向边,其中 \(⊕\ ...