Qt之QSS(Q_PROPERTY-原始属性)
2016-06-17 11:12
609 查看
简述
在Qt之QSS(样式表语法)一节讲过关于“设置对象属性”的用法,里面有一条很重要的原则是:任何可被识别的Q_PROPERTY都可以使用qproperty-<property name>语法设置。
这里需要对Qt属性系统有一定的了解,详见:Qt之属性系统。
简述
属性
实例
效果
QSS
源码
更多参考
属性
下面我们以QLabel为例,讲解如何在QSS中使用属性。class Q_WIDGETS_EXPORT QLabel : public QFrame { ... Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap) Q_PROPERTY(bool scaledContents READ hasScaledContents WRITE setScaledContents) ... };
可以看到,其中pixmap、scaledContents等属性均可使用,这样我们就可以通过QSS按照
qproperty-<property name>语法的方式设置标签的图标和适应性了。
但是如果要设置标签的大小该怎么办呢?因为我们并没有发现与width、height、size相关的属性。难道真的束手无策?当然不是了,我们可以继续向上级联查找基类,这样,可以很容易的发现QWidget中有需要的属性:
class Q_WIDGETS_EXPORT QWidget : public QObject, public QPaintDevice { ... Q_PROPERTY(QSize minimumSize READ minimumSize WRITE setMinimumSize) Q_PROPERTY(QSize maximumSize READ maximumSize WRITE setMaximumSize) ... };
实例
通过以上的分析,我们可以很快的用QSS构建属于自己的样式了。效果
QSS
下面,主要介绍qproperty-<property name>语法,其它样式可以忽略。
QLabel#customLabel { qproperty-minimumSize: 100px 100px; qproperty-maximumSize: 100px 100px; qproperty-pixmap: url(:/Images/logo); qproperty-scaledContents: true; } QPushButton#customButton { qproperty-text: "Click Me"; qproperty-icon: url(:/Images/logo); qproperty-iconSize: 20px 20px; } QGroupBox#customGroupBox { qproperty-title: "GroupBox"; }
源码
我们不需要通过C++代码调用任何接口,仅仅通过上面的样式就可以实现自定义风格了。QLabel *pLabel = new QLabel(this); QPushButton *pButton = new QPushButton(this); QGroupBox *pGroupBox = new QGroupBox(this); pLabel->setObjectName("customLabel"); pButton->setObjectName("customButton"); pGroupBox->setObjectName("customGroupBox"); QVBoxLayout *pLayout = new QVBoxLayout(); pLayout->addStretch(); pLayout->addWidget(pLabel, 0, Qt::AlignCenter); pLayout->addWidget(pButton); pLayout->addStretch(); pLayout->setSpacing(10); pLayout->setContentsMargins(10, 10, 10, 10); pGroupBox->setLayout(pLayout);
如果按照下面这种方式写,其结果是相同的:
... pLabel->setPixmap(QPixmap(":/Images/logo")); pLabel->setMinimumSize(100, 100); pLabel->setMaximumSize(100, 100); pLabel->setScaledContents(true); pButton->setIcon(QIcon(":/Images/logo")); pButton->setIconSize(QSize(20, 20)); pButton->setText("Click Me"); pGroupBox->setTitle("GroupBox"); ...
到这里,是不是越觉得QSS有意思了。。。O(∩_∩)O~
更多参考
Qt之加载QSS文件Qt之QSS(语法高亮)
Qt之QSS(样式表语法)
Qt之QSS(动态属性)
Qt之QSS(Q_PROPERTY-自定义属性)
Qt之QSS(QDarkStyleSheet)
Qt之QSS(黑色炫酷)
Qt之QSS(白色靓丽)
Qt之界面换肤
相关文章推荐
- QT学习 第一章:基本对话框
- 使用Shiboken为C++和Qt库创建Python绑定
- Qt 5.6更新至RC版,最终版本近在咫尺
- Qt定时器和随机数详解
- Qt实现图片移动实例(图文教程)
- Qt for Android开发实例教程
- QModelIndex/Role/Model介紹<二>
- Qt Model/View/Delegate浅谈 - QAbstractListModel
- Qt Model/View/Delegate浅谈 - roleNames()
- QT历程(一):与CryptoJs对应的AES加密
- 基于PyQt5的快速开发框架QFramer
- OSX下安装PyQt
- ok6410开发板移植DirectFB手记
- 【笔记】给Qt内嵌一个Chrome吧
- 【算法】最短路径之A*搜索
- qt入门必备
- 在 Qt4 中使用 C++11
- Hello Word ~ v0.2.2 背单词软件发布 -- By WHYPRO
- ubuntu下opencv和qt的安装配置
- linux下opengl的安装(with qt)