QStyle & QPalette

QT风格

  • Qt中的各种风格是一组继承自QStyle的类。
  • QStyle类是一个抽象基类,封装了GUI外观。
  • Qt的内建(bulit-in)部件使用 QStyle 来执行90%的绘制功能!
  • Qt风格已经内置在了Qt当中了,例如,Windows、Motif、Mac OS X风格等,部件特效只有在相应的平台上才会显示

继承自 QStyle 的一些类:

类名简介
QCDEStyleCDE风格
QCleanlooksStyle类似于GNOME中的Clearlook风格
QGtkStyleGTK+风格
QMotifStyleMotif风格
QMacStyleMac Os X风格
QPlastiqueStyle类似于KDE中的plastik
QWindowsStyleWindows风格
QWindowsVistaStyleWindows Vista风格
QWindowsXPStyleWindows XP风格

 改变程序窗口的风格:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // 获取当前系统支持的风格
    qDebug() << QStyleFactory::keys();
    // 设置程序的窗口风格
    QApplication::setStyle(QStyleFactory::create("WindowsVista"));
}

 

调色板(QPalette)

  • 调色板QPalette类包含了部件各种状态的颜色组。
  • 三种状态:激活(Active)、失效(Disabled)、非激活(Inactive)
  • Qt中的所有部件都包含调色板,并且让各自的调色板来绘制自身

调色板的颜色组包括:

  •  
  • 激活颜色组
    QPalette::Active,用于获得键盘焦点的窗口
  • 非激活颜色组
    QPalette::Inactive,用于其他的窗口
  • 失效颜色组
    QPalette::Disabled,用于由于其他而不可用的部件

 

设置调色板可以使用setColor()函数,需要指定颜色角色(Color Role)

Role:

常量简介
QPalette::Window一个一般的背景颜色
QPalette::WindowText一个一般的前景颜色
QPalette::Base主要作为输入部件的背景色
也可作为QComboBox的下拉列表背景色
QToolBar的手柄颜色
QPalette::AlternateBase在交替行颜色的视图中作为交替背景色
QPalette::ToolTipBase作为QToolTip和QWhatsThis的背景色
QPalette::ToolTipText作为QToolTip和QWhatThis的前景色
QPalette::Text和Base一起使用,作为前景色
QPalette::Button按钮部件背景色
QPalette::ButtonText按钮部件的前景色
QPalette::BrightText除了可以更好的设置文本深浅对比度
还可以用来加深文本线条、图标

 设置调色板:


QPalette类就是包含了部件各种状态的颜色组
要改变一个程序的调色板,步骤如下:

  •  
  • 先使用QApplication::palette()函数获取调色板
  • 更改属性
  • 最后使用QApplication::setPalette()使用

注意,如果更改了程序的调色板,会影响到该程序的所有部件!

如果只更改一个部件的调色板,调用该部件的palette()和setPalette()

    // ----
    // 获取按钮的调色板
    QPalette palette = ui->pushButton->palette();
    palette.setColor(QPalette::ButtonText, Qt::red);
    palette.setColor(QPalette::Button,Qt::black);
    ui->pushButton->setPalette(palette);

    ui->comboBox->setDisabled(true);
    palette = ui->comboBox->palette();
    palette.setColor(QPalette::Disabled, QPalette::Base, Qt::red);
    ui->comboBox->setPalette(palette);

没起作用??

 

参考:

不二如是:https://fishc.com.cn/forum.php?mod=viewthread&tid=78015&ctid=447

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柔弱胜刚强.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值