开发者

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

目录
  • qt样式属性
    • 1.代码里写
    • 2.qss里写
  • 方法定义和实现

    qt样式属性

    qt的qss样式是可以使用基本属性和property属性的,比如我们想改变组件的minimumSize有两种方法

    1.代码里写

    qLabel->setMinimumS编程ize (100,200);

    2.qss里写

    QLabel{
        qproperty-minimumSize:100px 200px;
    }

    但是,你会发现有些property属性写了不生效,比如说(它用了枚举值)

    QLabel{
        qproperty-alignment:AlignCenter;
    }

    在有些论坛里有说是可以这么写的

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

    什么原因呢?估计是在旧版本里Qt对AlignCenter字符串做了解析,新版本里不再识别它了,那么怎么解决呢?使用Qt::AlignCenter或Qt.AlignCenter?都是不行的,我们知道枚举值默认情况下都是int型的,那么我们直接设置int是不是就可以?

    ok,那么我们打印下AlignCenter的值

    qDebug() << Qt::AlignCenter << static_cast<int>(Qt::AlignCenter);

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

    QLabel{
    background-color:red;
    qproperty-aphplignment:132;
    }

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

    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>
    vohttp://www.devze.comid 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>();//在初始化的时候调http://www.devze.com用
    style = replaceQtStyleEnumValue(style);  //setStyleSheet前替换枚举变量
    qApp->setStyleSheet(style);

    这个时候样式再写

    QLabel{
    background-color:red;
    qproperty-alignment:AlignCenter;
    }

    就跟写132是一样的了

    以上就是Qt6.0 qproperty-*不生效原因解决分析的详细内容,更多关于Qt6.0 qproperty-*不生效的资料请关注编程客栈(www.devze.com)其它相关文章!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜