什么网站可以做试卷,做网站用的软件,互联网站建设机构,seo程序专员版权声明#xff1a;进步始于交流#xff0c;收获源于分享#xff01;纯正开源之美#xff0c;有趣、好玩、靠谱。。。作者#xff1a;一去丶二三里 博客地址#xff1a;http://blog.csdn.net/liang19890820 目录(?)[] 简述 在Qt之QSS#xff08;Q_PROPERTY-原始属性进步始于交流收获源于分享纯正开源之美有趣、好玩、靠谱。。。作者一去丶二三里 博客地址http://blog.csdn.net/liang19890820 目录(?)[] 简述 在Qt之QSSQ_PROPERTY-原始属性一节我们分享了Q_PROPERTY-原始属性的用法但通常情况下我们需要很多自定义样式例如动态获取QSS样式这时自定义属性就能很好的发挥其用武之地了。 简述问题解决方案实例 效果源码QSS使用更多参考 问题 在使用QAbstractItemModel、QAbstractItemDelegate更新表格样式的时候比如背景色、前景色等我们通常的做法是定义一些颜色常量然后根据不同的条件显示不同的颜色要么就是通过QSS全局设置让所有的背景色、前景色保持一致。 这有一个问题局限性太强无法动态获取颜色值大大降低了程序的扩展性。 解决方案 QAbstractItemModel、QAbstractItemDelegate均继承自QObject而QSS只能用于QWidget及其子孙类那么如何动态获取样式属性值呢 三部曲 创建一个从QWidget继承的专用类StyledWidget。为StyledWidget添加自定义属性并使用Q_PROPERTY声明自定义QSS使用自定义属性语法qproperty-property name其中Q_PROPERTY声明有以下要求 READ getFunction 用于读取属性使用const限定返回属性的类型或者类型的指针或引用。 WRITE setFunction 用于设置属性参数是一个属性的类型或者属性的const指针或引用返回 实例 效果 源码 创建一个从QWidget继承的专用类StyledWidget为其添加自定义属性并使用Q_PROPERTY声明 StyledWidget.h #ifndef STYLED_WIDGET
#define STYLED_WIDGET#include QWidgetclass StyledWidget : public QWidget
{Q_OBJECTQ_PROPERTY(QColor normalColor READ normalColor WRITE setNormalColor DESIGNABLE true)...
public:explicit StyledWidget(QWidget *parent 0); ~StyledWidget(); QColor normalColor() const; void setNormalColor(QColor color); ... private: QColor m_normalColor; ... }; #endif // STYLED_WIDGET 123456789101112131415161718192021222324StyledWidget.cpp ...
QColor StyledWidget::normalColor() const
{return m_normalColor;
}void StyledWidget::setNormalColor(QColor color)
{m_normalColor color;
}
... 1234567891011QSS QSS中使用自定义的属性设置对应的样式 StyledWidget {qproperty-normalColor: white; qproperty-disableColor: gray; qproperty-highlightColor: rgb(0, 160, 230); qproperty-errorColor: red; } 123456使用 在需要设置样式的类中声明StyledWidget class TableModel : public QAbstractTableModel
{Q_OBJECTpublic:...QVariant data(const QModelIndex index, int role Qt::DisplayRole) const;...
private:...StyledWidget m_styledWidget;
};12345678910111213使用自定义属性设置样式 QVariant TableModel::data(const QModelIndex index, int role) const
{if (!index.isValid())return QVariant();switch (role){case Qt::TextColorRole:{if (index.column() FILE_NAME_COLUMN)return m_styledWidget.normalColor(); if (index.column() SIZE_COLUMN) return m_styledWidget.highlightColor(); if (index.column() STATUS_COLUMN) return m_styledWidget.errorColor(); } ... } return QVariant(); } 转载于:https://www.cnblogs.com/wangjian8888/p/7604485.html