1. 远程过很多人电脑远程分析问题,发现一个通病,比如明明修改了某个数据库或者配置文件,结果运行程序一看,还是旧的数据,死活都不行,查了半天程序,始终找不到问题所在。最终查到原来是程序读取的文件根本不是修改过的文件,因为用户电脑环境中有好几份同样的代码目录,他打开的目录是另外一份,无论怎么修改,其实都是和当前程序无关的,根本没有改对地方。大数据统计,这种情况还真不少,至少占五分之一的比例。有好几份拷贝的情况很多时候避免不了,比如为了临时备份代码,以便测试新的代码。但是务必记得当前项目做过拷贝,遇到问题的时候先检查目录是否正确,是否是当前打开的项目代码所在目录。

  2. 在使用第三库的过程中,当你使用的库种类越多,会发现一个现象,有些库依赖编译器的,比如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的魅力。

  3. 有时候我们需要写入文件到磁盘,但是有些情况下,如果对应目录不存在则写入失败,需要先判断目录是否存在,不存在则新建,QDir提供了mkdir和mkpath两种方法来创建目录,以前以为这两个是一样的功能,类似于size和length,其实不是的,直到近期才发现了区别。mkdir只会创建路径中的最末尾的目录,如果父目录不存在,则创建失败。而mkpath会逐级判断整个路径的目录,父目录不存在则创建父目录,依次下去,保证指定的路径创建成功,建议使用mkpath。

QDir dir;
//如果path目录不存在则dir目录也会创建失败
dir.mkdir("f:/path/dir");
//会先创建path目录然后创建dir目录
dir.mkpath("f:/path/dir");
  1. 当你在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以及后续版本不存在。

  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的更多相关文章

  1. Qt开发经验小技巧81-90

    Qt中的QColor对颜色封装的很完美,支持各种转换,比如rgb.hsb.cmy.hsl,对应的是toRgb.toHsv.toCmyk.toHsl,还支持透明度设置,颜色值还能转成16进制格式显示. ...

  2. Qt开发经验小技巧61-70

    很多人问Qt嵌入式平台用哪个好,这里统一回答(当前时间节点2018年):imx6+335x比较稳定,性能高就用RK3288 RK3399,便宜的话就用全志H3,玩一玩可以用树莓派香橙派. 对于大段的注 ...

  3. Qt开发经验小技巧41-50

    如果使用sqlite数据库不想产生数据库文件,可以创建内存数据库. QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); ...

  4. Qt开发经验小技巧71-80

    在我们使用QList.QStringList.QByteArray等链表或者数组的过程中,如果只需要取值,而不是赋值,强烈建议使用 at() 取值而不是 [] 操作符,在官方书籍<C++ GUI ...

  5. Qt开发经验小技巧51-60

    在某些http post数据的时候,如果采用的是&字符串连接的数据发送,中文解析乱码的话,需要将中文进行URL转码. QString content = "测试中文"; Q ...

  6. Qt开发经验小技巧31-40

    代码判断MSVC编译器版本. if (_MSC_VER == 1800) MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015) MSVC++ 12.0 _ ...

  7. Qt开发经验小技巧21-30

    如果出现Z-order assignment: is not a valid widget.错误提示,用记事本打开对应的ui文件,找到为空的地方,删除即可. 善于利用QComboBox的addItem ...

  8. Qt开发经验小技巧11-20

    获取类的属性 const QMetaObject *metaobject = object->metaObject(); int count = metaobject->propertyC ...

  9. Qt开发经验小技巧1-10

    当编译发现大量错误的时候,从第一个看起,一个一个的解决,不要急着去看下一个错误,往往后面的错误都是由于前面的错误引起的,第一个解决后很可能都解决了. 定时器是个好东西,学会好使用它,有时候用QTime ...

  10. Qt开发之Hello Qt及学习小技巧

    创建第一个Qt程序的简单流程 如果安装了andriod或ios的版本也会显示出来,这里只显示了桌面端的 一个项目文件代码结构如下: 如下图可直接编辑label里的文字内容: 运行结果:(快捷键ctrl ...

随机推荐

  1. js模拟二维数组求和

    JavaScri实际上没有二维数组的概念,但是由于js变量是松散的,所以能设置数组元素为数组来模拟二维数组,以此类推,可以模拟多维数组. /* 需求:模拟了3 * 3数组求右上三角元素之和1 + 3 ...

  2. 《使用Gin框架构建分布式应用》阅读笔记:p52-p76

    <用Gin框架构建分布式应用>学习第4天,p32-p76总结,总计25页. 一.技术总结 1.Go知识点 (1)iouti 书上使用ioutil包读取JSON文件,但是从go 1.16 开 ...

  3. Kubernetes CNI 插件选型和应用场景探讨

    作者:马伟,青云科技容器顾问,云原生爱好者,目前专注于云原生技术,云原生领域技术栈涉及 Kubernetes.KubeSphere.KubeKey 等. 本文介绍容器环境常见网络应用场景及对应场景的 ...

  4. 一些新奇的玩意【php篇--持续更新】

    人不进步就等于退步! 接触越多的人以及事就能学到更多的东西. 以下仅为本人记录的一些新奇的东西,不喜勿喷! 1.??运算符号,在新的项目中突然发现很多红线报错,还以为是错误!看了下,是??运算的问题, ...

  5. 自学PHP笔记(二) PHP数据类型

    本文转发来自:https://blog.csdn.net/KH_FC/article/details/115415323 PHP数据类型可支持以下8种类型: 类型 说明 string 字符串 bool ...

  6. C#多线程编程:AutoResetEvent

    作用 简单的完成多线程同步,两个线程共享相同的AutoResetEvent对象.线程可以通过调用AutoResetEvent对象的WaitOne()方法进入等待状态当第二个线程调用Set()方法时,它 ...

  7. three.js+vue智慧社区web3d数字孪生三维地图

    案例效果截图如下: 具体案例场景和功能,详见b站视频: https://www.bilibili.com/video/BV1Bb421E7WL/?vd_source=7d4ec9c9275b9c7d1 ...

  8. NOIP2015 提高组 子串

    NOIP2015 提高组 子串 感觉是最长公共子序列模型的变式. 容易想到记 \(f[i][j][k]\) 表示 \(A\) 走到了第 \(i\) 位,\(B\) 匹配上了 \(1 \sim j\), ...

  9. PXI板卡的封装和接口形式

    PXI模块 PXI标准同时定义了3U和6U模块适用的机械尺寸与连接器形式.3U模块在模块底部安装有一个助拔手柄.在顶部和底部通过螺钉固定,底部的固定螺钉部分隐藏在助拔手柄中.占用超过一个槽位的模块可以 ...

  10. 题解:CF559B Equivalent Strings

    CF559B Equivalent Strings 题解 题目描述 吐槽一下,题目翻译有歧义. 思路分析 你会发现,当你需要判断字符串 \(a,b\) 是否等价时,如果长度为偶数,需要继续判断字符串 ...