• 646阅读
  • 0回复

[原创]Qt/C++开发经验小技巧286-290 [复制链接]

上一主题 下一主题
离线liudianwu
 

只看楼主 倒序阅读 楼主  发表于: 2023-11-09

国内站点:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)
国际站点:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun)

286. 很多时候项目越写越大,然后就可能遇到,明明之前很简单的一段代码,运行的好好的,就那么几行几十行,为何一旦加入到当前项目中,就不行了,百思不得其解。一般遇到这种情况,建议两种处理办法,办法一就是注释大法,从main函数入口开始,将不相关的都注释掉,仔细检查运行流程,直到本来不会出问题但是出问题的代码。办法二就是单独写个最简单的有问题的可以直接编译运行的示例,化繁为简,这样查找问题速度快。往往你会发现,写完这个简单的你怀疑的有问题的代码后,运行是完全正常的,他自己就好了,此时你可以安心的去排查其他代码了。

287. 现在很多linux用wayland作为桌面显示,这样会出现一个问题,由于没有坐标系统,导致无边框窗体无法拖动和定位(一般是Qt6开始强制默认优先用wayland,之前Qt5是默认有xcb则优先用xcb),你需要在main函数前面加一行 qputenv("QT_QPA_PLATFORM", "xcb");

288. 有时候导出文件后,希望直接打开文件管理器并选中刚才打开的文件,以便用户打开处理,需要通过执行命令来实现。
```cpp
QString path = "file:///e:/1.txt";
QProcess::startDetached("explorer.exe", QStringList() << "/select," << path);
```

289. 在QTreeWidget/QTableWidget的信号currentItemChanged中,执行对应的clear方法也会触发该信号,这就需要特别注意了,对应该信号的两个参数 current/previous 表示当前节点和上一个节点,两个参数的值都为空,所以在该信号对应槽参数处理中,必须先判断该值是否为空指针,不判断的话很可能导致程序崩溃。

290. 关于Qt中 += 和 \*= 的区别,+= 表示添加,不会去重,而 \*= 是去重添加,存在则不添加。建议用  \*=,尽管 += 也能正常使用,毕竟多一个重复的不影响编译器识别。
```cpp
QT += core gui
QT += core gui
message($$QT) //会打印 core gui core gui

QT *= core gui
QT *= core gui
message($$QT) //会打印 core gui

DEFINES += abc
DEFINES += abc
message($$DEFINES) //会打印 abc abc

DEFINES *= abc
DEFINES *= abc
message($$DEFINES) //会打印 abc
```
4条评分好评度+1贡献值+1金钱+10威望+1
20091001753 好评度 +1 - 2023-11-09
20091001753 贡献值 +1 - 2023-11-09
20091001753 威望 +1 - 2023-11-09
20091001753 金钱 +10 - 2023-11-09
欢迎关注微信公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发) QQ:517216493  WX:feiyangqingyun  QQ群:751439350
快速回复
限100 字节
 
上一个 下一个