逆枫゛

Qt学习群:1149411109 群文件提供博客源码,定期答疑、更新学习资料。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1,简介

 

Qt中给窗体或控件添加样式表的方法,大体有以下几种:

1,在ui设计器即Qt Designer内添加,右键控件"改变样式表"或直接在属性内输入

2,对窗口或控件调用 setStyleSheet 接口(继承自QWidget),或对app调用setStyleSheet(QApplication)

3,项目中,一般将样式表内容写到文本文件,程序启动时再通过方法2加载

这样方便管理,调整样式也不用重新编译,还避免在代码中书写过长字符串。

 

 

2,做法及效果

 

1,ui设计器:

该方法的好处是可以在输入样式表内容时检查格式是否有效,

另外可以直接预览窗口看到应用样式后的效果,如下图。

学习时可以使用该方法,一般项目内尽量少用,

因为以后很容易找不到写了哪里了,难以维护。

 

2,调用setStyleSheet

对按钮调用:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //可以看到在代码中设置样式,为了方便阅读,使用了繁琐的Tab和换行
    //因此除了特殊地方需要在代码追加修改样式,项目里一般建议在文本文件内写样式表
    ui->btn2->setStyleSheet("QPushButton{\
                                background:#EE6AA7;\
                                border:1px solid #8B7E66;\
                                border-radius:5px;\
                                color:white;\
                            }\
                            QPushButton:hover{\
                                background:#FF6EB4;\
                            }\
                            QPushButton:hover:pressed{\
                                background:#CD6090; \
                            }");
}

对app调用:

该样式会对程序所有按钮生效。

同理,对窗口调用则是应用到该窗口的所有子按钮控件,

而且样式表会随窗口继承,即孙窗口也一样有效。

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    //QApplication对整体应用程序设置样式
    a.setStyleSheet("QPushButton{\
                                background:#1C86EE;\
                                border:1px solid #8B7E66;\
                                border-radius:5px;\
                                color:white;\
                            }\
                            QPushButton:hover{\
                                background:#1E90FF;\
                            }\
                            QPushButton:hover:pressed{\
                                background:#1874CD; \
                            }");

    return a.exec();
}

 

3,从样式文件加载

 

一般我把样式文件写到.css格式后缀的文本文件中,因为notepad++可以识别该格式打开,能很方便的带颜色显示和编辑。

放到程序目录的单独的qss文件夹内,就像配置文件一样。

一般通用的样式,写到一个主css文件,供整个程序加载;

一些特殊样式就给所在窗口单独建一份样式文件,对该窗口加载。

所附示例演示了给一个对话框加载样式文件的做法。

LoadQssFile函数由于是从一个公用的功能类抽出来的,所以窗口是作为参数传进去的。

#include "DlgQSS.h"
#include "ui_DlgQSS.h"

#include <QFile>

DlgQSS::DlgQSS(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::DlgQSS)
{
    ui->setupUi(this);

    //加载外部样式表文件
    LoadQssFile(this,"DlgQSS.css");
}

DlgQSS::~DlgQSS()
{
    delete ui;
}

bool DlgQSS::LoadQssFile(QWidget* w,QString fileName)
{
    //样式表文件
    QString qssFile = QCoreApplication::applicationDirPath() + "\\qss\\" + fileName;
    QFile file(qssFile);
    if (file.open(QFile::ReadOnly))
    {
        QString qss = file.readAll();
        w->setStyleSheet(qss);
        file.close();
        return true;
    }
    return false;
}

 

4,示例工程源码

链接: https://pan.baidu.com/s/1_s0a_9pXYBrFB2LS_dCxGg 提取码: sgk2 

 

posted on 2019-08-30 17:38  逆枫゛  阅读(2000)  评论(0编辑  收藏  举报