• qt--调色板QPalette


    注意:不要把QPalette与 Qt 样式表联合使用

    在实际的应用中,经常需要对某个控件的颜色外观,如背景、前景色等,进行设置。

    Qt中提供的调色板QPalette类就是专门用于管理控件的外观显示。QPalette类相当于对话框或控件的调色板,管理着控件和窗体的所有颜色

    每个窗体和控件都包含一个QPalette对象,在显示时,对其做相应的设置即可 

    QWidget 会把调色板角色从父级传播到子级,除非启用了 Qt::WA_WindowPropagation 属性(使用 QWidget::setAttribute()函数设置) ,否则默认情况下调色板不会传播到窗口
    因某些样式依赖于第三方 API(比如 Mac 样式、windows vista 样式等),而这些样式并不一定遵循调色板,因此不能保证部件的调色板分配角色会改变部件的外观。此时可使用样式表
    还可以使用 QApplication::setPalette();静态函数设置整个应用程序的默认调色板

    QPalette有两个基本的概念:一个是ColorGroup;一个是ColorRole

    ColorGroup有三种不同的状态:

      QPalette::Active=0     激活状态(具有键盘焦点的窗口)
      QPalette::Disabled=1     被禁用的部件(而不是窗口)
      QPalette::Inactive=2        未激活状态(非活动)

    QPalette::Normal            同 Active

    ColorRole:

    常量 Value 备注
    QPalette::Window 10 一般的背景色
    QPalette::Background Window
    已过时,同 Window
    QPalette::WindowText 0 一般的前景色
    QPalette::Foreground WindowText
    已过时,同 WindowText
    QPalette::Base 9 主要用作文本输入小部件的背景色,但也可用于其他绘制-例如组合框下拉列表和工具栏的背景。通常是白色或其他浅色
    QPalette::AlternateBase 16
    用于视图中带有交替行颜色的备用背景色,详见
    QAbstractItemView::setAlternatingRowColors();函数的详解
    QPalette::ToolTipBase 18
    QToolTip 和 QWhatsThis 的背景色,QToolTip 使用 QPalette 的非活动颜色组,因为工具提示不是活动窗口
    QPalette::ToolTipText 19 用作QToolTip和QWhatsThis的前景色
    QPalette::PlaceholderText 20 用作各种文本输入小部件的占位符颜色。这个枚举值已经在Qt 5.12中引入
    QPalette::Text 6
    与 Base 一起使用的前景色,通常与 WindowText 相同,Text 通常用于文本,但也可用于线条、图标等
    QPalette::Button 1 普通按钮背景色
    QPalette::ButtonText 8
    与 Button 一起使用的前景色
    QPalette::BrightText 7 一种与WindowText非常不同的文本颜色,与深色的对比度很好。通常用于需要在文本或窗口文本的对比度较差的地方绘制的文本,例如在按下的按钮上。请注意,文本颜色可以用于除单词之外的其他内容;文本颜色通常用于文本,但是将文本颜色角色用于行、图标等是相当常见的
    QPalette::NoRole
    17
    无角色
    以下枚举用于 3D 效果,比如使按钮看更有立体感等,以下枚举依赖于 Window
    QPalette::Light
    2
    比 Button 的颜色更亮
    QPalette::Midlight
    3
    在 Button 和 Light 之间
    QPalette::Dark
    4
    比 Button 的颜色更暗
    QPalette::Mid
    5
    在 Button 和 Dark 之间
    QPalette::Shadow
    11
    阴影颜色,这是一个很深的颜色,默认使用 Qt::black(黑色)
    以下枚举用于选择项目时的颜色
    QPalette::Highlight
    12
    突出显示所选内容,默认颜色为 Qt::darkBlue(深蓝)
    QPalette::HighlightedText
    13
    突出显示时的文本颜色,默认颜色为 Qt::white(白色)
    以下枚举与超链接有关,注意:富文本不会使用以下枚举值
    QPalette::Link 
    14
    未访问的超链接的颜色,默认为 Qt::blue(蓝色)
    QPalette::LinkVisited
    15
    已访问过的超链接的颜色,默认为 Qt::magenta(洋红)

     

    实例一 

        QLabel* label=new QLabel("标签",this);
        label->move(10,10);
        label->resize(300,200);
        label->setAutoFillBackground(true); //是否自动填充控件的背景
        //如果启用,此属性将导致Qt在调用paint事件之前填充小部件的背景。使用的颜色由小部件的调色板QPalette来决定
        QPalette palette ;  //创建调色板对象
        palette=label->palette();  //返回控件的调色板
        palette.setColor(QPalette::Window, Qt::yellow);  //设置颜色
        //参数1:ColorRole枚举值   决定设置哪个地方的颜色
        //参数2:要设置的颜色
    
        palette.setColor(QPalette::WindowText, Qt::blue);
    
        label->setPalette(palette);  //控件使用调色板
        //如果setAutoFillBackground为true,控件的背景色马上发生变化
        //前景色不受setAutoFillBackground的影响

    实例二 

        QLabel* label=new QLabel("标签",this);
        label->move(10,10);
        label->resize(300,200);
        label->setAutoFillBackground(true); 
        QPalette palette ;  
        palette=label->palette();  
    
        QPixmap p;
        p.load("./tu.jpg");
        palette.setBrush(QPalette::Window,p);  //给控件设置背景图
    
    
        palette.setColor(QPalette::WindowText, Qt::blue);
    
        label->setPalette(palette);  

    实例三

    #include "win.h"
    
    Win::Win(QWidget *parent)
        : QWidget(parent)
    {
        this->resize(400,300);
    
        QPushButton *pb1=new QPushButton("AAA",this);
        pb1->move(22,22);
        QPushButton *pb2=new QPushButton("BBB",this);
        pb2->move(111,22);
        QLabel *pl=new QLabel("CCC",this);
        pl->move(22,55);
        QLineEdit *pe=new QLineEdit("DDD",this);
        pe->move(99,55);
        QComboBox *px=new QComboBox(this);
        px->move(266,55);
        px->addItem("EEE"); px->addItem("FFF");
        QPlainTextEdit *pt=new QPlainTextEdit("GGGGG",this);
        pt->move(22,88);
    
        //设置调色板各颜色角色的颜色
        QPalette p;
        p.setColor(QPalette::Window,QColor(111,1,1)); //①、背景色
        p.setColor(QPalette::WindowText,QColor(1,111,1)); //②、前景色
        p.setColor(QPalette::Base,QColor(111,111,1)); //③、文字输入部件背景色
        p.setColor(QPalette::Text,QColor(111,1,111)); //④、基于 Base 的前景色
        p.setColor(QPalette::Button,QColor(1,255,111)); //⑤、按钮背景色
    
        p.setColor(QPalette::ButtonText,QColor(255,255,0));//⑥、基于 Button 的前景色
        p.setColor(QPalette::Highlight,QColor(255,255,255)); //⑦、突出显示的颜色
        p.setColor(QPalette::HighlightedText,QColor(1,1,255)); //⑧、突出显示的文本颜色
        p.setColor(QPalette::Light,QColor(1,1,255));
        //以下颜色用于设置部件的 3D 效果。
         p.setColor(QPalette::Dark,QColor(255,1,255)); //
         p.setColor(QPalette::Shadow,QColor(255,1,255));//
         this->setPalette(p);
    
    }
    
    Win::~Win()
    {
    }

  • 相关阅读:
    Spring+Quartz实现文件中转站
    Velocity中的ComparisonDateTool、MathTool、NumberT...
    Adobe Flash Builder 4.7破解方法(绝对可用)
    12c weblogic需要输入用户名密码
    velocity+spring mvc+spring ioc+ibatis初试感觉(与struts+spring+hibernate比较)
    基于tomcat7 web开发中的一点小东西
    Positional parameter are considered deprecated; use named parameters or JPA-style positional parameters instead.
    spring service事务传播
    Spring注解方式实现任务调度【官方文档翻译】
    Tomcat 下 Memcached 集群与 Terracotta 集群比较
  • 原文地址:https://www.cnblogs.com/liming19680104/p/13885129.html
Copyright © 2020-2023  润新知