Qt/C++开发经验小技巧286-290

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

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

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

  3. 有时候导出文件后,希望直接打开文件管理器并选中刚才打开的文件,以便用户打开处理,需要通过执行命令来实现。

QString path = "file:///e:/1.txt";
QProcess::startDetached("explorer.exe", QStringList() << "/select," << path);
  1. 在QTreeWidget/QTableWidget的信号currentItemChanged中,执行对应的clear方法也会触发该信号,这就需要特别注意了,对应该信号的两个参数 current/previous 表示当前节点和上一个节点,两个参数的值都为空,所以在该信号对应槽参数处理中,必须先判断该值是否为空指针,不判断的话很可能导致程序崩溃。

  2. 关于Qt中 += 和 *= 的区别,+= 表示添加,不会去重,而 *= 是去重添加,存在则不添加。建议用 *=,尽管 += 也能正常使用,毕竟多一个重复的不影响编译器识别。

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章