前言:
? ? ? ? 在做項目或者開發QT軟件時,如果想要修改窗口標題欄背景顏色,發現沒有代碼可以直接設置,目前有兩種方法可以設置。
第一種,自定義一個界面類,用QLabel+QWidget實現,QLabel當作標題欄。
第二種,窗口標題欄背景色其實和Windows系統有關,通過與Windows系統接口修改。
? ? ? ? 這兩種方法我都試了一遍,第一種方法適合自定義多種樣式或者功能,代碼較長,費時。以下主要介紹第二種方法。
效果圖
這里是根據需求,將顏色設置為RGB(217, 237, 248)。
詳細代碼
Pro文件
LIBS += -ldwmapi
頭文件
#ifdef _WIN32
#include <Windows.h>
#include <dwmapi.h>
#pragma comment(lib, "dwmapi.lib")
#endif
CPP文件
這個函數也可以將顏色抽取出來,使用參數傳入。
// 定義 Windows 11 特有的屬性(如果 SDK 版本較舊)
#ifndef DWMWA_CAPTION_COLOR
#define DWMWA_CAPTION_COLOR 35
#endif
#ifndef DWMWA_TEXT_COLOR
#define DWMWA_TEXT_COLOR 36
#endif
void SetTitleBarColor(QWidget* widget)
{auto setColorFunc = [widget]() {HWND hwnd = (HWND)widget->winId();if (hwnd) {// 檢查系統是否支持這些屬性BOOL supported = FALSE;if (SUCCEEDED(::DwmSetWindowAttribute(hwnd, DWMWA_CAPTION_COLOR,&supported, sizeof(supported)))) {COLORREF titleBarColor = RGB(217, 237, 248);::DwmSetWindowAttribute(hwnd, DWMWA_CAPTION_COLOR,&titleBarColor, sizeof(titleBarColor));COLORREF titleTextColor = RGB(0, 0, 0);::DwmSetWindowAttribute(hwnd, DWMWA_TEXT_COLOR,&titleTextColor, sizeof(titleTextColor));}}};if (!widget->isVisible()) {QTimer::singleShot(100, setColorFunc);}else {setColorFunc();}
}