一、什么是QStyle

  • Qt是一个跨平台的类库,相同的界面组件在不同的操作系统上显示效果是不一样的
  • QStyle是封装了GUI界面组件外观的抽象类,Qt定义了QStyle类的一些子类,应用于不同的操作系统,如QWindowsStyle、QMacStyle等。这些样式是Qt CUI模块自带的,在不停的平台上编译运行的程序具有缺省的样式,QApplication::style()可以返回应用程序缺省的样式

QT组件

  • Qt内置的界面组件都是用QStyle进行绘制,以保证它们在与运行平台的界面效果一直

例如下图是QComboBox在不同操作系统上的9种不同的样式

二、QStyleFactory、QApplication类

  • 使用Qt的内置样式,可以通过QStyleFactory::keys()获取运行平台支持的样式列表,然后用QStyleFactory::create创建样式,最后用QApplication::setStyle()设置样式
  • 除了这些Qt内置的样式,用户也可以从QStyle类继承,定义自己的样式,一般从QStyle的子类QProxyStyle继承

QStyleFactory类

  • 该类管理这Qt的内置样式,QStyleFactory有两个静态函数

  • keys():返回一个字符串列表,是所在平台支持的QStyle的名称列表
  • create():根据样式名称字符串创建一个QStyle对象

QApplication类

  • 该类也有两个静态函数用于操作,样式

  • style():返回应用程序当前的样式,任何一个GUI应用程序,在创建时就有一个缺省的样式,通过下面的语句就可以获取缺省样式的名称

  • setStyle():为应用程序设置一个样式,设置样式后,界面元素都具有这个样式所定义的外观

三、演示案例

第一步:

  • 创建一个基于QMainWindows的项目,类名采取默认值。然后设计界面

第二步:

  • 构造函数:将当前系统的所有样式名称列在“系统样式”的下拉列表中(下面是在Windows下的运行效果)

#include <QStyleFactory>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);QRegExp regExp(".(.*)\\+?Style");QString defaultStyle=QApplication::style()->metaObject()->className();ui->statusBar->showMessage(defaultStyle);if(regExp.exactMatch(defaultStyle))defaultStyle=regExp.cap(1);//将当前平台上所有的ui->comboSysStyle->addItems(QStyleFactory::keys());ui->comboSysStyle->setCurrentIndex(ui->comboSysStyle->findText(defaultStyle,Qt::MatchContains));
}

第三步:

  • “系统样式”下拉列表的选项改变槽函数(currentIndexChanged(QString))
void MainWindow::on_comboSysStyle_currentIndexChanged(const QString &arg1)
{//使用选择的样式名称创建样式styleQStyle *style=QStyleFactory::create(arg1);//然后调用此函数为应用程序设置样式qApp->setStyle(style);ui->statusBar->showMessage(style->metaObject()->className());//如果不需要显示样式的类名称,直接使用这一句就可以了,上面的都删除//qApp->setStyle(arg1);
}

例如,我们选择“Fusion”可以看到样式改变

第四步:

  • “应用样式表”的响应函数:点击之后,我们在函数中为界面上的几个显示组件类设置了样式表(即使窗口样式改变了,样式表依然存在)
void MainWindow::on_btnStyleSheet_clicked()
{this->setStyleSheet("QPlainTextEdit{color:blue;font:13pt '宋体';}""QPushButton:hover{background-color:lime;}""QLineEdit{border:2px groove red;""backfround-color:rgb(170,255,127);""border-radius:6px;}""QCheckBox:checked{color:red;}""QRadioButton:checked{color:red;}");
}
  • “取消样式表”的响应函数:将样式表清空
void MainWindow::on_btnNormal_clicked()
{   //取消所有样式表this->setStyleSheet("");
}

Qt:63---QStyle类设置窗口样式(QStyleFactory、QApplication)相关推荐

  1. WINDOWS API ——SETWINDOWLONG—— 设置窗口样式 SetWindowLong 函数原型为:LONG SetWindowLong(HWND hwnd,int nIndex,Lon

    WINDOWS API --SETWINDOWLONG-- 设置窗口样式 SetWindowLong 函数原型为:LONG SetWindowLong(HWND hwnd,int nIndex,Lon ...

  2. Qt的QStyle类的标准图标汇总

    Qt的QStyle类的标准图标用代码显示在界面如下: #include "QtWidgetsApplication1.h" #include<QPushButton> ...

  3. QT的QStyle类的使用

    详细说明 QStyle类是一个抽象基类,它封装了GUI的外观. Qt包含一组QStyle子类,这些子类可模拟Qt支持的不同平台的样式(QWindowsStyle,QMacStyle等). 默认情况下, ...

  4. VS2017 + Qt设置窗口置顶与不置顶的注意问题

    Qt中默认的设置窗口置顶的方法是: Qt::WindowFlags flag = windowFlags(); setWindowFlags(flag | Qt::WindowStaysOnTopHi ...

  5. QStyle类用法总结(二)

    1.前言 为了更容易搞懂Qt自定义风格绘制,在平时开发中,实现定制自己风格的UI,本人推出有关QStyle自定义风格系列文章.文章链接如下: <QStyle类用法总结(一)>.对Qt自定义 ...

  6. python tkinter设置窗口大小_Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例...

    我就废话不多说了.大家直接看代码吧! #!/usr/bin/env python #coding=utf-8 ''' 窗口屏幕居中,设置窗口最大,最小尺寸... 版权所有 2014 yao_yu (h ...

  7. wxWidgets:窗口样式

    wxWidgets:窗口样式 wxWidgets:窗口样式 wxWidgets:窗口样式 窗口样式用于在创建时指定窗口的替代行为和外观. 这些符号的定义方式是,它们可以使用 C++按位或运算符组合在& ...

  8. python窗口居中_Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例

    我就废话不多说了.大家直接看代码吧! #!/usr/bin/env python #coding=utf-8 ''' 窗口屏幕居中,设置窗口最大,最小尺寸... 版权所有 2014 yao_yu (h ...

  9. qt使用样式表设置窗口widget为圆角

    提要 窗口widget是无法直接通过样式表设置为圆角的,需要在窗口QWidget中拖入控件QFrame,将QFrame设置的和窗口QWidget一样大小,将窗口QWidget中需要的控件拖入到QFra ...

最新文章

  1. EventBus3.0源码解析
  2. 用Table变量返回多行数据
  3. linux系统硬盘设置密码,LUKS:Linux下磁盘加密
  4. GOF23种设计模式
  5. mysql java 代码生成器_java代码生成器
  6. List的三种遍历方式
  7. 项目中的设计模式【适配器模式】
  8. 微信公众号--H5商城在线客服的解决方案:使用微信公众号的对话能力插件实现在线客服沟通
  9. 如何查看浏览器的 cookie
  10. HTML+CSS+JAVASCRIPT 高仿低配网页版网易云音乐播放器
  11. excel锁定第一行_将Excel标题行锁定在适当的位置
  12. JavaScript 数组方法every()
  13. 从写作到演讲,虾米君不断尝试的 2021|年终回顾
  14. IBM Cloud 2015 - CDN
  15. 【AVL】宠物收养所
  16. Asymmetric numeral systems (ANS)非对称数字系统最全资料整理
  17. 神经网络模型无法正常工作时我们应该做什么(系列)——数据标准化处理(Normalize)
  18. 渗透测试工具:跨站脚本漏洞检测---Xsser
  19. 电脑内存突然爆满的可能解决方法
  20. 计算机学院表白情书,表白情书模板大全

热门文章

  1. 基于单片机自动烘干衣架系统设计(毕设课设)
  2. 英文单词词形还原程序
  3. JAMA Psychiatry:社区劣势与青少年神经认知和大脑结构的关系
  4. oracle ebs r12 级dba专家和运维实践
  5. 剖析NLP历史,看chatGPT的发展
  6. 某公司服务器raid阵列2块硬盘损坏数据恢复成功案例
  7. SpringSecurity-三更草堂-学习笔记
  8. 99Report报表工具软件
  9. vue 动画(transition)
  10. LCC-HVDC高压直流输电PSCAD模型介绍