QT风格
- Qt中的各种风格是一组继承自QStyle的类。
- QStyle类是一个抽象基类,封装了GUI外观。
- Qt的内建(bulit-in)部件使用 QStyle 来执行90%的绘制功能!
- Qt风格已经内置在了Qt当中了,例如,Windows、Motif、Mac OS X风格等,部件特效只有在相应的平台上才会显示
继承自 QStyle 的一些类:
类名 | 简介 |
QCDEStyle | CDE风格 |
QCleanlooksStyle | 类似于GNOME中的Clearlook风格 |
QGtkStyle | GTK+风格 |
QMotifStyle | Motif风格 |
QMacStyle | Mac Os X风格 |
QPlastiqueStyle | 类似于KDE中的plastik |
QWindowsStyle | Windows风格 |
QWindowsVistaStyle | Windows Vista风格 |
QWindowsXPStyle | Windows 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