界面外观和风格
Qt风格
获取风格
要获取系统中所有可用Qt风格,可以使用
QStyleFactory::keys函数。要获取应用程序使用的风格,可以使用
style()函数。
例如在KDE下执行:
qDebug()<<QStyleFactory::keys();
输出结果为:
(“Breeze”, “kvantum-dark”, “kvantum”, “Oxygen”, “QtCurve”, “Windows”, “Fusion”)
指定程序风格
要指定程序的风格,可以
使用
setStyle函数。该函数在QApplication和QWidget都用。在程序运行时传入
-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 被用于被禁用的部件
颜色角色的概念如下:
主颜色角色为:
枚举名 |
用途 |
|---|---|
QPalette::Window |
通用背景色 |
QPalette::WindowText |
通用前景色 |
QPalette::Base |
一般被用于列表的背景色。但是也可以被用于其他地方,比如combox候选列表的背景和工具栏的把手(handles)。一般为白色或其他亮色 |
QPalette::AlternateBase |
被用于视图的可选背景色,参阅:QAbstractItemView::setAlternatingRowColors |
QPalette::ToolTipBase |
工具栏提示和 |
QPalette::ToolTipText |
工具栏提示和 |
QPalette::PlaceholderText |
用于多种输入框的占位符颜色,该属性在5.12引入 |
QPalette::Text |
与WindowText类似 |
QPalette::Button |
按钮背景色 |
QPalette::ButtonText |
按钮前景色 |
QPalette::BrightText |
前景色,在某些情况下使用该颜色 |
用于3D效果的颜色角色:
枚举名 |
用途 |
|---|---|
QPalette::Light |
比 |
QPalette::Midlight |
介于 |
QPalette::Dark |
比 |
QPalette::Mid |
介于 |
QPalette::Shadow |
非常暗的颜色,默认为 |
用于被选择文本的颜色:
枚举名 |
用途 |
|---|---|
QPalette::Highlight |
用于指示被选择项目或当前项目的颜色,默认为 |
QPalette::HighlightedText |
用于与 |
用于超链接的颜色:
枚举名 |
用途 |
|---|---|
QPalette::Link |
未被点击的超链接的颜色,默认为 |
QPalette::LinkVisited |
已被点击的超链接的颜色,默认为 |
备注
Link和LinkVisited不用于富文本编辑器。相比使用风格改变部件的外观,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);
效果如下:
自定义界面风格
要自定义风格,需要继承
参见
` Qt—自定义界面之QStyle <https://www.cnblogs.com/lgxZJ/p/8038839.html>`_
` 用QT创建新风格: QStyle <https://www.cnblogs.com/findumars/p/5979147.html>`_
样式表
TODO