Qt:63---QStyle类设置窗口样式(QStyleFactory、QApplication)
一、什么是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)相关推荐
- WINDOWS API ——SETWINDOWLONG—— 设置窗口样式 SetWindowLong 函数原型为:LONG SetWindowLong(HWND hwnd,int nIndex,Lon
WINDOWS API --SETWINDOWLONG-- 设置窗口样式 SetWindowLong 函数原型为:LONG SetWindowLong(HWND hwnd,int nIndex,Lon ...
- Qt的QStyle类的标准图标汇总
Qt的QStyle类的标准图标用代码显示在界面如下: #include "QtWidgetsApplication1.h" #include<QPushButton> ...
- QT的QStyle类的使用
详细说明 QStyle类是一个抽象基类,它封装了GUI的外观. Qt包含一组QStyle子类,这些子类可模拟Qt支持的不同平台的样式(QWindowsStyle,QMacStyle等). 默认情况下, ...
- VS2017 + Qt设置窗口置顶与不置顶的注意问题
Qt中默认的设置窗口置顶的方法是: Qt::WindowFlags flag = windowFlags(); setWindowFlags(flag | Qt::WindowStaysOnTopHi ...
- QStyle类用法总结(二)
1.前言 为了更容易搞懂Qt自定义风格绘制,在平时开发中,实现定制自己风格的UI,本人推出有关QStyle自定义风格系列文章.文章链接如下: <QStyle类用法总结(一)>.对Qt自定义 ...
- python tkinter设置窗口大小_Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例...
我就废话不多说了.大家直接看代码吧! #!/usr/bin/env python #coding=utf-8 ''' 窗口屏幕居中,设置窗口最大,最小尺寸... 版权所有 2014 yao_yu (h ...
- wxWidgets:窗口样式
wxWidgets:窗口样式 wxWidgets:窗口样式 wxWidgets:窗口样式 窗口样式用于在创建时指定窗口的替代行为和外观. 这些符号的定义方式是,它们可以使用 C++按位或运算符组合在& ...
- python窗口居中_Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
我就废话不多说了.大家直接看代码吧! #!/usr/bin/env python #coding=utf-8 ''' 窗口屏幕居中,设置窗口最大,最小尺寸... 版权所有 2014 yao_yu (h ...
- qt使用样式表设置窗口widget为圆角
提要 窗口widget是无法直接通过样式表设置为圆角的,需要在窗口QWidget中拖入控件QFrame,将QFrame设置的和窗口QWidget一样大小,将窗口QWidget中需要的控件拖入到QFra ...
最新文章
- EventBus3.0源码解析
- 用Table变量返回多行数据
- linux系统硬盘设置密码,LUKS:Linux下磁盘加密
- GOF23种设计模式
- mysql java 代码生成器_java代码生成器
- List的三种遍历方式
- 项目中的设计模式【适配器模式】
- 微信公众号--H5商城在线客服的解决方案:使用微信公众号的对话能力插件实现在线客服沟通
- 如何查看浏览器的 cookie
- HTML+CSS+JAVASCRIPT 高仿低配网页版网易云音乐播放器
- excel锁定第一行_将Excel标题行锁定在适当的位置
- JavaScript 数组方法every()
- 从写作到演讲,虾米君不断尝试的 2021|年终回顾
- IBM Cloud 2015 - CDN
- 【AVL】宠物收养所
- Asymmetric numeral systems (ANS)非对称数字系统最全资料整理
- 神经网络模型无法正常工作时我们应该做什么(系列)——数据标准化处理(Normalize)
- 渗透测试工具:跨站脚本漏洞检测---Xsser
- 电脑内存突然爆满的可能解决方法
- 计算机学院表白情书,表白情书模板大全