Qt6.0 qproperty-*不生效原因解决分析
作者:点墨
这篇文章主要为大家介绍了Qt6.0 qproperty-*不生效原因解决分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
qt样式属性
qt的qss样式是可以使用基本属性和property属性的,比如我们想改变组件的minimumSize有两种方法
1.代码里写
qLabel->setMinimumSize (100,200);
2.qss里写
QLabel{ qproperty-minimumSize:100px 200px; }
但是,你会发现有些property属性写了不生效,比如说(它用了枚举值)
QLabel{ qproperty-alignment:AlignCenter; }
在有些论坛里有说是可以这么写的
什么原因呢?估计是在旧版本里Qt对AlignCenter字符串做了解析,新版本里不再识别它了,那么怎么解决呢?使用Qt::AlignCenter或Qt.AlignCenter?都是不行的,我们知道枚举值默认情况下都是int型的,那么我们直接设置int是不是就可以?
ok,那么我们打印下AlignCenter的值
qDebug() << Qt::AlignCenter << static_cast<int>(Qt::AlignCenter);
QLabel{ background-color:red; qproperty-alignment:132; }
ok,它生效了~
但是写这个我们还得去查AlignCenter对应的值,太麻烦了,怎么做才能实现跟QT4一样,我写AlignCenter你就帮我居中呢?
在setStyleSheet前增加内容处理,对样式文件内容进行正则替换,把写的枚举变量替换成真正的枚举值即可。
方法定义和实现
template <typename T> void insertQtStyleEnumMap(); QString replaceQtStyleEnumValue(const QString &str); QMap<QString, int> m_qtStyleEnumMap; QString StyleHelper::replaceQtStyleEnumValue(const QString &str) { QString result = str; QMap<QString, int>::Iterator it = m_qtStyleEnumMap.begin(); while (it != m_qtStyleEnumMap.end()) { result.replace(it.key(), QString::number(it.value())); it++; } return result; } template <typename T> void StyleHelper::insertQtStyleEnumMap() { QMetaEnum metaEnum = QMetaEnum::fromType<T>(); for (int i = 0; i < metaEnum.keyCount(); i++) { m_qtStyleEnumMap.insert(metaEnum.key(i), metaEnum.value(i)); } }
insertQtStyleEnumMap<Qt::Alignment>();//在初始化的时候调用 style = replaceQtStyleEnumValue(style); //setStyleSheet前替换枚举变量 qApp->setStyleSheet(style);
这个时候样式再写
QLabel{ background-color:red; qproperty-alignment:AlignCenter; }
就跟写132是一样的了
以上就是Qt6.0 qproperty-*不生效原因解决分析的详细内容,更多关于Qt6.0 qproperty-*不生效的资料请关注脚本之家其它相关文章!