Qt/C++開發經驗小技巧296-300

飞扬青云發表於2024-07-02
  1. 使用QDir::setCurrent設定當前目錄後,會影響程式中的所有相對目錄的執行,導致可能的意外發生,一般相對目錄都預設是可執行檔案所在目錄,所以如果程式中為了特殊處理臨時呼叫了QDir::setCurrent設定過相對目錄,建議處理完成以後立即切換回來。
QDir::setCurrent("f:/");
QImage img(":/image/bg_novideo.png");
//結果圖片儲存在f:/1.jpg
img.save("1.jpg", "jpg");
img.save("./1.jpg", "jpg");

//下面是正確做法
//先記住之前的目錄
QString path = QDir::currentPath();
QDir::setCurrent("f:/");
xxxxxxx執行任務

//重新設定回預設目錄
QDir::setCurrent(path);
//結果圖片儲存在當前目錄下
img.save("1.jpg", "jpg");
  1. 大概從Qt6.4開始,如果專案中同時使用了QOpenGLWidget和QWebEngine瀏覽器控制元件,可能會出現QWebEngine載入網頁黑屏的情況,6.4.3和6.5.3版本必現。根據官網的描述https://doc.qt.io/qt-6/qquickwidget.html#graphics-api-support ,你需要額外加一行程式碼。
#include "qquickwindow.h"
int main(int argc, char *argv[])
{
    QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL);
    QApplication a(argc, argv);
}
  1. 現在現在新版的Qt都是需要線上下載,有時候下載到中途過程會遇到提示下載錯誤,很可能是部分外掛模組對應伺服器沒有打包導致的,一般都是一些末尾帶TP字樣的模組,這些模組一般也不會用,所以如果想要安裝成功,你需要到選擇Qt版本和外掛的地方,開啟Additional Libraries節點,將那些用不上的尤其是TP結尾的都不勾選,再安裝即可。

  2. Qt中可以透過qputenv和qgetenv來設定和獲取系統環境變數,既可以在程式碼中設定對應的值,也可以在系統環境變數中設定,比如windows系統環境變數中設定,相當於可以自定義字串指定值,這樣靈活性大大增強,有時候因為程式碼不能修改了,可以嘗試去設定一個Qt認識的環境變數字串值來產生效果。這裡要特別提示的是,環境變數設定後一定要生效才能正常讀取到,比如xp系統設定後可能要重啟作業系統才能生效,還有一個是要重啟QtCreator才能識別到最新的環境變數,可能是做了快取機制。

//設定每個視窗都有獨立的控制代碼
QApplication a(argc, argv);
a.setAttribute(Qt::AA_NativeWindows);

//上面的方法是透過程式碼的方式設定/有時候已經是可執行檔案/無法修改程式碼
//經過查閱程式碼得知會優先透過qgetenv讀取是否有QT_USE_NATIVE_WINDOWS標誌
//如果存在則按照QT_USE_NATIVE_WINDOWS變數的值進行賦值
//這種方法有個缺點/就是所有的Qt程式都會應用
  1. 佈局的setContentsMargins函式引數依次是左上右下,而qss中的margin依次是上右下左,很多人混搞混。

相關文章