首页 > 其他分享 >Qt中支持暗色主题

Qt中支持暗色主题

时间:2024-01-18 18:11:56浏览次数:25  
标签:darkPalette Qt 主题 调色板 暗色 QPalette setColor

在 Qt 6.5 及更高版本中,为了支持暗色主题(dark theme),Qt 引入了一些新的特性和概念。主要是通过使用 QStyleHints 的新属性 colorScheme,这个属性可以根据用户的系统偏好设置为 Qt::ColorScheme::LightQt::ColorScheme::DarkQt::ColorScheme::Unknown。这允许应用程序根据用户的系统偏好来决定使用明亮或暗色的应用程序调色板。并且,QStyleHints 还提供了一个 colorSchemeChanged 信号,让应用程序能够响应系统颜色方案的变化。

但是,Qt 6.5 建议不再手动制作调色板,而是使用系统的调色板,这是基于用户的偏好设置的。在一些样式中,如 Windows Vista 样式,它们可能会忽略系统调色板,并用不同的调色板覆盖它。而像 “Fusion” 或经典 Windows 样式这样的样式则与任何调色板都兼容,不会修改应用程序的调色板。

要在 C++ 应用程序中使用暗色主题,你可以采取以下步骤:

  1. 设置兼容的样式:首先,设置一个与暗色主题兼容的样式,如 “Fusion” 样式。

  2. 加载和应用调色板:然后,根据需要加载并应用暗色调色板。

以下是一个使用暗色主题的 Qt Widgets 应用程序的示例代码:

#include <QApplication>
#include <QStyleFactory>
#include <QPalette>
#include <QMainWindow>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 设置兼容的样式
    QApplication::setStyle(QStyleFactory::create("Fusion"));

    // 创建并应用暗色调色板
    QPalette darkPalette;
    darkPalette.setColor(QPalette::Window, QColor(53, 53, 53));
    darkPalette.setColor(QPalette::WindowText, Qt::white);
    darkPalette.setColor(QPalette::Base, QColor(25, 25, 25));
    darkPalette.setColor(QPalette::AlternateBase, QColor(53, 53, 53));
    darkPalette.setColor(QPalette::ToolTipBase, Qt::white);
    darkPalette.setColor(QPalette::ToolTipText, Qt::white);
    darkPalette.setColor(QPalette::Text, Qt::white);
    darkPalette.setColor(QPalette::Button, QColor(53, 53, 53));
    darkPalette.setColor(QPalette::ButtonText, Qt::white);
    darkPalette.setColor(QPalette::BrightText, Qt::red);
    darkPalette.setColor(QPalette::Link, QColor(42, 130, 218));
    darkPalette.setColor(QPalette::Highlight, QColor(42, 130, 218));
    darkPalette.setColor(QPalette::HighlightedText, Qt::black);

    app.setPalette(darkPalette);

    // 创建主窗口
    QMainWindow mainWindow;
    mainWindow.show();

    return app.exec();
}

这个示例设置了一个暗色的调色板,并应用到整个应用程序中。请注意,这里使用的颜色是示例,你可以根据需要自定义这些颜色以更好地适应你的应用程序设计。

这种设置暗色主题的方法同样适用于 Qt 5.15.11。在 Qt 5 中,虽然没有内置的暗色主题支持,但你可以通过手动设置应用程序的调色板来实现暗色主题。

这段代码在 Qt 5.15.11 中也应该能正常工作。它首先设置了与暗色主题兼容的“Fusion”样式,然后定义了一个暗色调色板并将其应用到整个应用程序中。请注意,暗色调色板的颜色可以根据你的设计需求进行自定义。

此外,尽管 Qt 5 没有像 Qt 6 中那样的系统级暗色主题支持,但手动设置调色板是实现暗色主题的有效方法。

要将应用程序的样式和调色板恢复为默认设置,你可以使用 Qt 提供的相关方法。在 Qt 中,默认的样式和调色板取决于你的操作系统和环境。以下是一个示例代码,展示了如何将样式和调色板重置为默认值:

#include <QApplication>
#include <QStyleFactory>
#include <QMainWindow>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 重置为默认样式
    QApplication::setStyle(QStyleFactory::create(""));

    // 重置为默认调色板
    app.setPalette(QApplication::style()->standardPalette());

    // 创建主窗口
    QMainWindow mainWindow;
    mainWindow.show();

    return app.exec();
}

在这个示例中,我们首先通过将样式名称设置为一个空字符串来重置应用程序的样式。这会导致 Qt 使用平台默认的样式。接着,我们调用 QApplication::style()->standardPalette() 来获取当前样式的标准调色板,并将其设置为应用程序的调色板,从而恢复默认的调色板设置。

这样做可以将你的应用程序恢复到其初始的外观和风格,与操作系统的默认设置一致。这适用于 Qt 5 和 Qt 6。

标签:darkPalette,Qt,主题,调色板,暗色,QPalette,setColor
From: https://www.cnblogs.com/linxmouse/p/17973126

相关文章

  • QTreeWidget
    一、双击编辑1、定义连接connect(m_treeWidget,&QTreeView::doubleClicked,this,&FileViewPanelCreator::onItemDoubleClicked);connect(m_treeWidget->itemDelegate(),&QAbstractItemDelegate::closeEditor,this,&FileViewPanelCreator::onCloseEd......
  • QT程序多平台下可执行文件的打包方式
    一、简述QT项目开发完成后,需要打包发布程序,在实际生产中不可能把源码发给别人,所以需要将源码打包正可执行文件或者安装程序。二、设置应用图标把ico文件放到源代码目录下,在QT项目中的'.pro'文件中添加自己准备好的ico文件(使用QT默认生成的图标时,可以跳过这一步)  RC......
  • QT之静态函数发送信号
    一、简介由于博主本人是初学者对QT的机制不了解,所以遇到了一个比较大的坑,特此记录一下。我遇到的问题是无法在静态函数中向另外一个类发送信号。解决办法:先将信号发送给同类中的普通函数,然后在从普通函数中发送信号给外部类。二、C与C++中static的用法这里不是介绍QT静态函数信......
  • QT之ARM平台的移植
      在开发板中运行QT程序的基本条件是具备QT环境,那么QT的移植尤为重要,接下载我将和小伙伴们一起学习QT的移植。一、准备材料tslib源码qt-everywhere-src-5.12.9.tar.xz源码arm开发版二、获取安装包tslib源码的git获取地址是:https://github.com/libts/tslib。qt-everywh......
  • python pyqt6 QComboBox 圆角边框
    圆角边框周围显示黑色直角QComboBox 新增如下设定即可xxx_source.view().window().setWindowFlag(Qt.WindowType.NoDropShadowWindowHint)xxx_source.view().window().setWindowFlag(Qt.WindowType.FramelessWindowHint)xxx_source.view().window().setAttribute(Qt.Widge......
  • Qt/C++自定义界面大全/20套精美皮肤/26套精美UI界面/一键换肤/自定义颜色/各种导航界
    一、前言这个系列对应自定义控件大全,一个专注于控件的编写,一个专注于UI界面的编写,程序员有两大软肋,一个是忌讳别人说自己的程序很烂很多bug,一个就是不擅长UI,基本上配色就直接rgb,对于第一点,只要放松心态,直面自己的不足,不断改进,才能问鼎武林至尊。至于第二点,因为程序员擅长的是逻辑......
  • python pyqt6 颜色弹窗 QColorDialog
     defsetColor(self):#避免窗口置顶后,Dialog被主窗口覆盖,所以需要传递self#设定默认颜色使用getColor的第一个参数(使用setCurrentColor不生效)#"选择颜色"为Dialog弹窗的标题#设定QColorDialog.ColorDialogOption.ShowAlphaChanne......
  • CH395实现MQTT应用(补充说明)
    本文是对该篇文章的补充CH395+EMQX实现MQTT应用(Windows系统)-lqlq123-博客园(cnblogs.com)1.切换中文版在设置中可以选择EMQX使用语言及样式主题 2.监控主题及消息数据第一种方法:点击左侧监控,下拉可以直接看到所有客户端的数据详情第二种方法:想要监控特......
  • 界面组件DevExpress ASP.NET Core v23.2 - 拥有全新的主题样式
    DevExpressASP.NETCore Controls使用强大的混合方法,结合现代企业Web开发工具所期望的所有功能。该套件通过ASP.NETRazor标记和服务器端ASP.NETCoreWebAPI的生产力和简便性,提供客户端JavaScript的性能和灵活性。ThemeBuilder工具和集成的MaterialDesign、通用主题集可以让......
  • QT与VTK结合
    QT与VTk结合最简单的方法在代码中实例化vtkwidget,并设置其渲染窗口setRenderWindow,如下所示:#include"vtkGenericOpenGLRenderWindow.h"#include"QVTKOpenGLNativeWidget.h"QVTKOpenGLNativeWidget*qvtkWidget=newQVTKOpenGLNativeWidget();vtkGenericOpenGLRend......