简 述: 应用软件在「ous20 和 MAcOS10.14 下」显示应用不同的QStyle「即:所有控件的样式换肤」, 自定义风格 QStyle:显示当前 OS 的所有支持的风格Style;

[TOC]


本文初发于 “偕臧的小站“,同步转载于此。


起初背景:

创建一个简单地🌰「Qt 的工程项目」,在 uos20 和 MacOS10.14.6 系统上面都跑一边,简单的摆放几个控件在窗口上面,用来查看使用不同的 Style 的时候,用来表现不同的效果,给人以以直观的软件换肤 感受。


QStyleFactory 和 QStyle 讲解:

QStyleFactory:看做很多风格模式的集合

QStyle:看做具体操作系统的里面有几种默认的风格

这次的源码讲解比较少,其中主要就是这一段 QStyleFactoryqApp->setStyle()的使用

//查看当前 OS 下的所有支持风格
QStringList listStyle = QStyleFactory::keys();
foreach(QString val, listStyle)
  qDebug()<<val<<"  ";

//若为 OS 自带的QStyle,则
qApp->setStyle("系统自带风格");

//若为自定义新的QStyle,则
qApp->setStyle(QStyleFactory::create("自定义风格")
  • 在 UOS20 下,该系统支持的风格如下:

    • “chameleon”
    • “dsemilight”
    • “dsemidark”
    • “dlight”
    • “ddark”
    • “Windows”
    • “Fusion”
  • 在 MacOS10.14.6 下,该系统支持的风格如下:

    • “macintosh”
    • “Windows”
    • “Fusion”

改变 OS 高亮色(活动色):

在 MacOS 和 uos(deepin) 里面是可以改变系统的高亮色 「有时候也被称之为活动色 」,而默认一般都是蓝色的,且 windows 里面也是在设置里面修改。另外两个其修改设置的地方如下图:

运行效果:

先上一个最终的运行效果图:

在 UOS20 下效果图:

chameleon:

dsemilight:

dsemidark:

dlight:

ddark:

Windows:

Fusion:

在 MacOS10.14.6 下效果图:

macintosh:

Windows:

Fusion:


核心源码:

void Widget::init()
{
    QTableWidget *table = new QTableWidget(10, 10, this);
    table->move(10, 10);

    QScrollBar *scrollBarH = new QScrollBar(this);
    scrollBarH->move(300, 50);
    scrollBarH->setRange(0, 100);
    scrollBarH->setValue(34);
    scrollBarH->resize(380, 20);
    scrollBarH->setOrientation(Qt::Horizontal);

    QScrollBar *scrollBarV = new QScrollBar(this);
    scrollBarV->move(50, 250);
    scrollBarV->setRange(0, 100);
    scrollBarV->setValue(67);
    scrollBarV->resize(20, 380);
    scrollBarV->setOrientation(Qt::Vertical);

    QProgressBar* progreH = new QProgressBar(this);
    progreH->move(300, 100);
    progreH->resize(250, 40);
    progreH->setValue(37);
    progreH->setOrientation(Qt::Horizontal);

    QProgressBar* progreV = new QProgressBar(this);
    progreV->move(100, 300);
    progreV->resize(40, 250);
    progreV->setValue(67);
    progreV->setOrientation(Qt::Vertical);

    int i = 0;
    QStringList listStyle = QStyleFactory::keys();
    foreach(QString val, listStyle) {   //打印当前系统支持的系统风格
        qDebug()<<val<<"  ";
        QPushButton *btn = new QPushButton(val, this);
        btn->move(this->rect().right() - 100, this->rect().top() + i++ * 40);
        connect(btn, &QPushButton::clicked, this, [=](){
            qApp->setStyle(val);
        });
    }

}

源码下载:

https://github.com/touwoyimuli/QtExamples 【QtMyStyleEx/QtExample01/QtStyleEx】