QT<33> 修改窗口标题栏背景颜色

发布于:2025-07-08 ⋅ 阅读:(20) ⋅ 点赞:(0)

前言:

        在做项目或者开发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();
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到