Qt Style Sheets(qt样式表)

简介: 我认为qt样式表对于专注于ui交互的人,其在qt的地位不亚于信号与槽的地位。通过qt样式表可以展示绝大部分你可以想象得到的风格。

我认为qt样式表对于专注于ui交互的人,其在qt的地位不亚于信号与槽的地位。通过qt样式表可以展示绝大部分你可以想象得到的风格。

qt样式表的使用是先将要特例化的样式建立在后缀qss的文件中,在程序启动时加载进来,那些在qss文件中涉及的样式将会替换掉qt各个界面元件默认的样式。

要将qss加载在程序中,需要3个步骤:

1)在qt资源文件.qrc中加入的qss资源,例如:

<RCC version="1.0">
    <qresource prefix="/">
        <file>qss/skin.qss</file>
    </qresource>

</RCC>

2)在程序中读取qss文件信息并设置,示例:

//设置界面皮肤
bool setSkin(QApplication* const app, QString const &skinFile)
{
    QFile file(skinFile);
    if (QFile::exists(skinFile) && file.open(QIODevice::ReadOnly))
    {
        //设置默认风格,有Windows WindowsXP WindowsVista Motif CDE Plastique Cleanlooks多种选择
        QApplication::setStyle(QStyleFactory::create("WindowsXP"));
        QString strTemp;
        QTextStream in(&file);
        while (!in.atEnd())
        {
            strTemp.append(in.readLine());
        }
        file.close();
        app->setStyleSheet(strTemp);
    } else{
        return false;
    }
    return true;
};

//主函数入口
int main(int argc, char *argv[])
{
    //app构造
    QApplication app(argc, argv);
    //主窗口
    MainWindow w;
    //设置界面皮肤
    setSkin(&app ,":/qss/skin.qss");
    w.show();
    return app.exec();
};

3)在qss中将需要变更样式的元件进行重新设计,例如要改变qtreeview的风格

/******************      QTreeView       **************/
QTreeView {
    /*alternate-background-color: yellow;*/
    font-size:12px;
    font-family:"Courier New";
    show-decoration-selected: 1;
}

QTreeView::item {
    border: 1px solid #d9d9d9;
    border-top-color: transparent;
    border-bottom-color: transparent;
}
/* 鼠标在QTreeView上面移动时的效果 */
QTreeView::item:hover {
    background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #e7effd, stop: 1 #cbdaf1);
    border: 1px solid #bfcde4;
    /*background-color:rgba(0,230,230,127);*/
}

QTreeView::item:selected {
    border: 1px solid #0055ff;
    /*background-color:rgba(0,230,0,127);*/
}
/* 节点被选中激活时的效果 */
QTreeView::item:selected:active{
    background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #0028ff, stop: 1 #0055ff);
}

QTreeView::item:selected:!active {
    background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #0000ff, stop: 1 #0028ff);
}

QTreeView::branch:has-siblings:!adjoins-item {
    border-image: url(:/images/vline.png)0;
}

QTreeView::branch:has-siblings:adjoins-item {
    border-image: url(:/images/branch-more.png)0;
}

QTreeView::branch:!has-children:!has-siblings:adjoins-item {
    border-image: url(:/images/branch-end.png)0;
}

QTreeView::branch:has-children:!has-siblings:closed,
QTreeView::branch:closed:has-children:has-siblings {
    border-image: none;
    image: url(:/images/branch-closed.png);
}

QTreeView::branch:open:has-children:!has-siblings,
QTreeView::branch:open:has-children:has-siblings {
    border-image: none;
    image: url(:/images/branch-open.png);
}

treeview_img:demo_treeview

关于样式表更多更深层级的知识可参考:http://doc.qt.io/qt-4.8/stylesheet-examples.html

目录
相关文章
|
JavaScript 前端开发 C++
初学Qt不会样式表怎么办,打包好的Qt样式表一键生成送给你。
很多人应该和我一样,想做界面才接触的Qt,结果就是做不出来华丽的界面,想给控件上个色?不会,百度半天,好不容易给控件添加了背景色,下一个控件又不会了,别急,这次福利来了,我将平时用到的样式表做了一个总结,并做了一个一键生成,调节数据就可以实时显示,里面包括了Label,LineEdit,PushButton,CheckBox,RadioButton,ScrollBar,Slider,Progressbar,Tabwidget,ToolBox,TabWidget控件的自定义。代码很简单,就是重复写槽函数,但其对于新手的学习很有帮助,避免了盲目,大量的通过百度数据拼接样式表。一来方便学习,所以参数
初学Qt不会样式表怎么办,打包好的Qt样式表一键生成送给你。
Qt样式表——选择器详解
Qt样式表——选择器详解
|
前端开发
Qt | 关于样式表的使用 QStyleSheet
关于Qt样式表的使用。
478 0
|
设计模式 前端开发
【QT】QT样式表语法
【QT】QT样式表语法
【QT】QT样式表语法
|
前端开发
Qt之QSS(样式表语法)
简述 Qt样式表(以下统称QSS)的术语和语法规则几乎和CSS相同。如果你熟悉CSS,可以快速浏览以下内容。 简述 样式规则 选择器类型 子控件 伪选择器 解决冲突 级联效应 继承性 Namespaces中的部件 设置对象属性 更多参考 样式规则 QSS包含了一个样式规则序列,一个样式规则由一个选择器和声明组成,选择器指定哪些部件由规则影响,声明指
1981 0
|
1月前
|
网络协议 C++
C++ Qt开发:QTcpSocket网络通信组件
`QTcpSocket`和`QTcpServer`是Qt中用于实现基于TCP(Transmission Control Protocol)通信的两个关键类。TCP是一种面向连接的协议,它提供可靠的、双向的、面向字节流的通信。这两个类允许Qt应用程序在网络上建立客户端和服务器之间的连接。Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QTcpSocket`组件实现基于TCP的网络通信功能。
37 8
C++ Qt开发:QTcpSocket网络通信组件
|
17天前
qt开发使用camera类获取摄像头信息并拍照保存
qt开发使用camera类获取摄像头信息并拍照保存

相关课程

更多

推荐镜像

更多