马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一、前言
1、 一个完善的应用程序,不但应该有实用的功能,还要有一个漂亮的表面,这样才能使应用程序更加友爱,更加吸引用户。
2、 作为一个跨平台的UI开辟框架,Qt提供了强大而灵活的界面表面设计机制。
3、 本篇会讲解:
(1)、Qt风格QStyle[了解]。
(2)、调色板QPalette[了解]。
(3)、Qt样式表Qt Style Sheets。
(4)、不规则窗体和透明窗体的实现方法。
二、Qt风格QStyle[了解]
1、 QStyle类是一个抽象基类,Qt中的各种风格类都继承自QStyle。
2、 Qt内置的风格类(QStyle子类),模拟Qt支持的差异平台的样式,封装了一个GUI的表面,Qt的内建部件使用QStyle子类来实行几乎所有的绘制工作,以确保它们看起来像各个平台上的本地部件一样。
3、 QStyleFactory类,通过keys()函数获取可用的风格字符串,通过create()函数创建一个QStyle对象。
4、 一般windows风格和fusion风格默认可用,而有些风格只在特定平台上才有效,如windowsxp风格、windowsvista风格、gtk风格和macintosh风格。
5、 用Qt Designer打开.ui文件,可以用以下方式,预览界面。
Visual Studio:窗体–>预览于–>XX风格。
Qt Creator: 工具–>Form Editor–> review in–>XX风格。
6、 应用程序想使用差异的风格运行,可以调用QApplication的setStyle()函数来指定风格对象。
7、 代码:
- #include "mainwindow.h"
- #include <QApplication>
- #include <QStyleFactory>
- #include <QDebug>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- QStringList styleStrList = QStyleFactory::keys();
- qDebug() << styleStrList; //输出可用的风格字符串,如("windowsvista", "Windows", "Fusion")
- //设置应用程序的风格
- QApplication::setStyle(QStyleFactory::create("windowsvista"));
- MainWindow w;
- w.show();
- return a.exec();
- }
复制代码 8、 单个部件,可以调用部件的setStyle()函数指定该部件的风格。
如:ui->progressBar->setStyle(QStyleFactory::create(“windows”));
9、 自定义风格类:略。
三、调色板QPalette[了解]
1、 调色板QPalette类包含了部件各种状态的颜色组,管理着部件所有颜色信息。
2、 Qt中所有部件都包含一个调色板,而且使用各自的调色板来绘制它们自身。
3、 QPalette类有两个基本概念,一个是ColorGroup,另一个是ColorRole。
4、 一个调色板有三种状态颜色组ColorGroup,激活(Active)、非激活(Inactive)和失效(Disabled)。
(1)、激活颜色组(QPalette::Active):用于得到键盘焦点的窗口。
(2)、非激活颜色组(QPalette::Inactive): 用于别的没有得到键盘焦点的窗口。
(3)、失效颜色组(QPalette: isabled): 用于因为一些原因而不可用的部件(设置Disabled)。
5、 调色板的颜色脚色,用来指定该颜色所起的作用,重要的颜色脚色ColorRole有:
(1)、QPalette::Window 一般的背景颜色。
(2)、QPalette::WindowText 一般的前景颜色。
(3)、QPalette::Base 重要作为输入部件(如QLineEdit)的背景色,也可用作QComboBox的下拉列表的背景色,或者QToolBar的手柄颜色,一般是白色或别的浅色。
(4)、QPalette::AlternateBase 在瓜代行颜色的视图中作为瓜代背景色。
(5)、QPalette::ToolTipBase 作为QToolTip和QWhatsThis的背景色。
(6)、QPalette::ToolTipText 作为QToolTip和QWhatsThis的前景色。
(7)、QPalette::Button 按钮部件背景色。
(8)、QPalette::ButtonText 按钮部件前景色。
(9)、QPalette::BrightText 一种与深色对比度较大的文本颜色,一般用于当Text或者WindowText的对比度较差时。
6、 应用程序更改调色板:
(1)、调用QApplication::palette()函数获取其调色板。
(2)、调色板更改。
(3)、调用QApplication::setPalette()函数使用该调色板。
7、 一个部件更改调色板:
(1)、调用部件的palette()函数获取其调色板。
(2)、调色板更改。
(3)、调用部件的setPalette()函数使用该调色板。
8、 留意,
(1)、更改部件的调色板只会影响该部件及其子部件,更改应用程序的调色板会影响到该程序的所有窗口部件。(继承关系)
(2)、.ui上的部件,可以在属性编辑器中修改palette属性,来更改调色板。(可以预览效果,也可以看到颜色脚色对应哪里)
9、 重要函数:
void QPalette::setColor ( ColorRole role, const QColor & color ); //所有颜色组的颜色脚色role,都设置为color。
void QPalette::setColor ( ColorGroup group, ColorRole role, const QColor & color ); //给定颜色组group,给定颜色脚色role,设置为color。
void QPalette::setBrush (QPalette::ColorRole role, const QBrush & brush);
void QPalette::setBrush (QPalette::ColorGroup group, QPalette::ColorRole role, const QBrush & brush);
10、 代码:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
- //获取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);
复制代码 }
三、Qt样式表
详情见"Qt 样式表.txt"。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |