界面外观和风格

Qt风格

获取风格

  • 要获取系统中所有可用Qt风格,可以使用 QStyleFactory::keys 函数。

  • 要获取应用程序使用的风格,可以使用 style() 函数。

例如在KDE下执行:

qDebug()<<QStyleFactory::keys();

输出结果为:

("Breeze", "kvantum-dark", "kvantum", "Oxygen", "QtCurve", "Windows", "Fusion")

指定程序风格

要指定程序的风格,可以

  • 使用 setStyle 函数。该函数在 QApplicationQWidget 都用。

  • 在程序运行时传入 -style [风格] 参数

例如:

int main(int argc, char *argv[]){
    QApplication a(argc, argv);
    a.setStyle(QStyleFactory::create("fusion")); // 使用 fusion 风格
    MainWindow w;
    w.show();
    return a.exec();
}

和 :

qtcreator -style fusion

指定 qtcreator 使用 fusion 风格。

setStyle 函数常常配合 QStyleFactory::create 函数使用,QStyleFactory::create 使用风格名构造一个风格对象 ,并返回其指针。

调色板和颜色

Qt使用 QPalette 设置小部件的颜色,为了方便地设置颜色,Qt提出了颜色组(color groups)和颜色角色的概念:

颜色组共有三种:

  • QPalette::Active 被用于拥有鼠标焦点的部件

  • QPalette::Inactive 被用于没有鼠标焦点的部件

  • QPalette::Disabled 被用于被禁用的部件

颜色角色的概念如下:

image

主颜色角色为:

枚举名

用途

QPalette::Window

通用背景色

QPalette::WindowText

通用前景色

QPalette::Base

一般被用于列表的背景色。但是也可以被用于其他地方,比如combox候选列表的背景和工具栏的把手(handles)。一般为白色或其他亮色

QPalette::AlternateBase

被用于视图的可选背景色,参阅:QAbstractItemView::setAlternatingRowColors

QPalette::ToolTipBase

工具栏提示和 WhatsThis 的背景色

QPalette::ToolTipText

工具栏提示和 WhatsThis 的前景色

QPalette::PlaceholderText

用于多种输入框的占位符颜色,该属性在5.12引入

QPalette::Text

与WindowText类似

QPalette::Button

按钮背景色

QPalette::ButtonText

按钮前景色

QPalette::BrightText

前景色,在某些情况下使用该颜色

用于3D效果的颜色角色:

枚举名

用途

QPalette::Light

QPalette::Button 亮的颜色

QPalette::Midlight

介于 QPalette::ButtonQPalette::Light 之间的颜色

QPalette::Dark

QPalette::Button 暗的颜色

QPalette::Mid

介于 QPalette::ButtonQPalette::Dark 之间的颜色

QPalette::Shadow

非常暗的颜色,默认为 Qt::black

用于被选择文本的颜色:

枚举名

用途

QPalette::Highlight

用于指示被选择项目或当前项目的颜色,默认为 Qt::darkBlue

QPalette::HighlightedText

用于与 QPalette::Highlight 形成对比的颜色,默认为 Qt::white

用于超链接的颜色:

枚举名

用途

QPalette::Link

未被点击的超链接的颜色,默认为 Qt::blue

QPalette::LinkVisited

已被点击的超链接的颜色,默认为 Qt::magenta

  • LinkLinkVisited 不用于富文本编辑器。

  • 相比使用风格改变部件的外观,Qt官方更加推荐使用Qt 样式表 改变部件外观

例如:

QPalette pale = ui->pushButton->palette();
pale.setColor(QPalette::Active,QPalette::ButtonText, Qt::red); // 在有焦点时设置字体颜色为红色
pale.setColor(QPalette::Button, Qt::green); // 设置按钮背景为绿色
ui->pushButton->setPalette(pale);

效果如下:

image

样式表

  • TODO

Last moify: 2022-12-04 15:11:33
Build time:2025-07-18 09:41:42
Powered By asphinx