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. 云原生爱好者周刊:长得最像苹果的 Linux 桌面

    云原生一周动态要闻 SUSE 发布 Harvester 0.2.0 IBM 收购容器服务提供商 BoxBoat Kubernetes 和云原生运营报告 2021 发布 适用于 Kubernetes 的 ...

  2. 使用LayUI实现文件上传的一个误区

    1.HTML 2.JS 3.后端处理(注意:参数 file) 这里传入的参数名只能是 file LayUI文件上传官方文档: https://www.layui.com/doc/modules/upl ...

  3. HTML 中 script 标签的属性和加载顺序

    script 标签默认是阻塞加载的,也就是先下载src内容,然后执行src内容,然后再往后读文档 head 中的 script 按顺序加载执行,然后再加载 body 的元素. 把 script 移动到 ...

  4. Games101 作业8 质点弹簧系统

    目录 1 前言 2 基础数据结构 3 欧拉 4 Verlet Integration 4.1 Constraints 1 前言 质点弹簧系统的模拟仿真,其实非常简单,核心就是牛顿第二定律 \(F = ...

  5. Go语言基础06 _function

    Go语言基础06 _function 函数在Go语言中是一等公民 与其他主要编程语言的差别 可以有多个返回值 所有参数都是值传递:slice,map,channel 会有传引用的 错觉 函数可以作为变 ...

  6. python实现基于RPC协议的接口自动化测试

    01什么是RPC RPC(Remote Procedure Call)远程过程调用协议是一个用于建立适当框架的协议.从本质上讲,它使一台机器上的程序能够调用另一台机器上的子程序,而不会意识到它是远程的 ...

  7. Python不同数据结构的元素频率统计

    1.list的词频统计 这里利用Python字典的键值对来进行统计.逻辑就是,根据list的内容生成一个字典,把要统计的列表元素的值作为字典的key,而后给字典中对应的key进行赋值,赋值方法采用字典 ...

  8. C++学习——类当中static关键字的作用

    一.类和对象 我们知道类是"行为"和"属性"的集合,我们可以通过类来实例化对象,从而定义对象的"行为"和"属性".比如: ...

  9. Air780E软件指南:zlib解压示例

    一.ZLIB解压工具简介 Zlib解压工具是一个广泛使用的压缩和解压缩库,主要用于处理数据的压缩和解压缩任务.Zlib使用的是DEFLATE算法,这是一种通用的压缩算法.它被应用在很多场景中,比如压缩 ...

  10. 『玩转Streamlit』--布局与容器组件

    在Streamlit中,布局类组件扮演着至关重要的角色. 它们不仅决定了应用程序的视觉呈现和用户体验,也极大地增强了页面内容的组织性和可读性. 通过这些组件,开发者可以灵活地划分页面空间,创建出清晰. ...