Qt6.0 qproperty-*不生效原因解决分析

 更新时间:2023年08月24日 11:10:12   作者:点墨  
这篇文章主要为大家介绍了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-*不生效的资料请关注脚本之家其它相关文章!

相关文章

  • C++11新特性之列表初始化的具体使用

    C++11新特性之列表初始化的具体使用

    在我们实际编程中,我们经常会碰到变量初始化的问题,本文主要介绍了C++11新特性之列表初始化的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C++中函数匹配机制详解

    C++中函数匹配机制详解

    大家好,本篇文章主要讲的是C++中函数匹配机制详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • C++解决输出链表中倒数k个结点的问题

    C++解决输出链表中倒数k个结点的问题

    这篇文章主要给大家介绍了关于如何利用C++解决输出链表中倒数k个结点的问题,文中通过实例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友可以参考下
    2021-12-12
  • 详解如何实现C++虚函数调用汇编代码

    详解如何实现C++虚函数调用汇编代码

    多态是C++中最重要的特性之一,对虚函数的调用在C++代码中是随处可见的,本篇文章我们详细探讨一下,感兴趣的朋友快来看看吧
    2021-11-11
  • c/c++的opencv图像金字塔缩放实现

    c/c++的opencv图像金字塔缩放实现

    本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴趣的可以了解一下
    2025-05-05
  • 深入理解Java事务的原理与应用

    深入理解Java事务的原理与应用

    下面小编就为大家带来一篇深入理解Java事务的原理与应用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • opencv3/C++绘制几何图形实例

    opencv3/C++绘制几何图形实例

    今天小编就为大家分享一篇opencv3/C++绘制几何图形实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • C语言实现九大排序算法的实例代码

    C语言实现九大排序算法的实例代码

    这篇文章主要给大家介绍了关于C语言实现九大排序算法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • C语言中格式化输出符号%d、%c、%p、%x等详解

    C语言中格式化输出符号%d、%c、%p、%x等详解

    格式化输出在C语言中非常常用,提供了多种用法来控制输出的格式,下面这篇文章主要给大家介绍了关于C语言中格式化输出符号%d、%c、%p、%x等的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • Qt使用QPainter实现自定义圆形进度条

    Qt使用QPainter实现自定义圆形进度条

    这篇文章主要介绍了Qt如何使用QPainter实现自定义圆形进度条功能,文中的示例代码讲解详细,对我们学习Qt有一定的帮助,需要的可以参考一下
    2022-06-06

最新评论