Qt中的各种风格是一组继承自QStyle
的类。QStyle类是一个抽象基类,封装了一个GUI的外观,Qt的内建(built-in)部件使用它来执行几乎所有的绘制工作,以确保它们看起来像各个平台上的本地部件一样。QStyleFactory
类可以创建一个 QStyle对象,首先通过keys()
函数获取可用的风格,然后使用create()
函数创建一个QStyle对象。一般 windows风格和fusion风格是默认可用的,而有些风格只在特定的平台上才有效,如 windowsxp风格,windowsvista风格、gtk风格和macintosh 风格。
在使用Qt Creator设计模式设计界面时,可以使用Qt提供的各种风格进行预览,当然也可以使用特定的风格来运行程序。下面来看具体的例子。
新建Qt Widgets应用,项目名称为mystyle,类MainWindow,基类 QMain Window保持不变。建立完项目后,单击mainwindow.ui文件进入设计模式,向界面上拖入一个 Push Button、 Check Box, SpinBox、Horizontal Scroll Bar, LCD Number和 Progress Bar。然后选择“工具→FormEditor→Preview in”菜单项,这里列出了几种现在可用的风格,选择“Fusion风格”,预览效果如图8-1所示。
也可以使用其他风格进行预览。
如果想使用不同的风格来运行程序,那么只需要调用QApplication 的 setStyle()函数
来指定要使用的风格即可。现在打开 main. cpp文件,添加头文件包含# include
< QStyleFactory>,然后在main()函数的"QApplication a(argc,argv);"后添加
a.setStyle(QStyleFactory::create("fusion"));
这时运行程序便会使用Fusion风格。如果不想在程序中指定风格,而是想在运行程序时再指定,那么就可以在使用命令行运行程序时通过添加参数来指定。比如要使用Fusion风格,则可以使用“-style fusion”参数。如果不想整个应用程序都使用相同的风格,那么可以调用部件的setStyle()函数来指定该部件的风格。
进入 mainwin-dow.cpp文件,先添加头文件#include < QStyleFactory>,然后在构造函数中添加如下一行代码:
ui->progressBar->setStyle(QStyleFactory::create("windows"));
这时再次运行程序,其中的进度条部件就会使用Windows的风格了。除了Qt中提供的这些风格外,也可以自定义风格,一般的做法是子类化Qt的风格类,或者子类化 QCommonStyle
类。Qt风格更多的内容可以通过Styles and Style Aware Widgets
关键字查看。
调色板QPalette
类包含了部件各种状态的颜色组。一个调色板包含3种状态:激活(Active),失效(Disabled)和非激活(Inactive)。
Qt中的所有部件都包含一个调色板,并且使用各自的调色板来绘制它们自身,这样可以使用户界面更容易配置,也更容易保持一致。调色板中的颜色组包括:
激活颜色组QPalette: :Active,用于获得键盘焦点的窗口;
非激活颜色组QPalette: : Inactive,用于其他没有获得键盘焦点的窗口;
失效颜色组QPalette::Disabled,用于因为一些原因而不可用的部件(不是窗口)。
要改变一个应用程序的调色板,可以先使用QApplication: : palette()
函数来获取其调色板,然后进行更改,最后使用QApplication ; ; setPalette()函数来使用该调色板。更改了应用程序的调色板会影响到该程序的所有窗口部件。如果要改变一个部件的调色板,则可以调用该部件的 palette()和 setPalette()函数,这样只会影响该部件及其子部件。下面来看一个例子。
仍然在前面的程序中进行更改。在 mainwindow.cpp文件中添加头文件#include< QPalette>,然后在构造函数中继续添加如下代码:
// 获取pushButton的调色板
QPalette palette1 = ui->pushButton->palette();
// 设置按钮文本颜色为红色
palette1.setColor(QPalette::ButtonText, Qt::red);
// 设置按钮背景色为绿色
palette1.setColor(QPalette::Button, Qt::green);
// pushButton使用修改后的调色板
ui->pushButton->setPalette(palette1);
// 设置spinBox不可用
ui->spinBox->setDisabled(true);
QPalette palette2 = ui->spinBox->palette();
// 设置spinBox不可用时的背景颜色为蓝色
palette2.setColor(QPalette::Disabled,QPalette::Base,Qt::blue);
ui->spinBox->setPalette(palette2);
设置调色板颜色时可以使用setColor()函数,这个函数需要指定颜色角色(ColorRole)。在QPalette中,颜色角色用来指定该颜色所起的作用,如背景颜色或者是文本颜色等,主要的颜色角色如表所列。
对于在设计模式中添加到界面上的部件,也可以在其属性编辑器中通过修改 palette属性来设置它的调色板,这样还可以预览修改后的效果。现在可以运行程序查看效果。调色板的更多知识可以参考QPalette类的帮助文档。