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