Qt6.0?qproperty-*不生效原因解決分析
qt樣式屬性
qt的qss樣式是可以使用基本屬性和property屬性的,比如我們想改變組件的minimumSize有兩種方法
1.代碼里寫(xiě)
qLabel->setMinimumSize (100,200);
2.qss里寫(xiě)
QLabel{
qproperty-minimumSize:100px 200px;
}但是,你會(huì)發(fā)現(xiàn)有些property屬性寫(xiě)了不生效,比如說(shuō)(它用了枚舉值)
QLabel{
qproperty-alignment:AlignCenter;
}在有些論壇里有說(shuō)是可以這么寫(xiě)的

什么原因呢?估計(jì)是在舊版本里Qt對(duì)AlignCenter字符串做了解析,新版本里不再識(shí)別它了,那么怎么解決呢?使用Qt::AlignCenter或Qt.AlignCenter?都是不行的,我們知道枚舉值默認(rèn)情況下都是int型的,那么我們直接設(shè)置int是不是就可以?
ok,那么我們打印下AlignCenter的值
qDebug() << Qt::AlignCenter << static_cast<int>(Qt::AlignCenter);

QLabel{
background-color:red;
qproperty-alignment:132;
}
ok,它生效了~
但是寫(xiě)這個(gè)我們還得去查AlignCenter對(duì)應(yīng)的值,太麻煩了,怎么做才能實(shí)現(xiàn)跟QT4一樣,我寫(xiě)AlignCenter你就幫我居中呢?
在setStyleSheet前增加內(nèi)容處理,對(duì)樣式文件內(nèi)容進(jìn)行正則替換,把寫(xiě)的枚舉變量替換成真正的枚舉值即可。
方法定義和實(shí)現(xiàn)
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>();//在初始化的時(shí)候調(diào)用 style = replaceQtStyleEnumValue(style); //setStyleSheet前替換枚舉變量 qApp->setStyleSheet(style);
這個(gè)時(shí)候樣式再寫(xiě)
QLabel{
background-color:red;
qproperty-alignment:AlignCenter;
}就跟寫(xiě)132是一樣的了
以上就是Qt6.0 qproperty-*不生效原因解決分析的詳細(xì)內(nèi)容,更多關(guān)于Qt6.0 qproperty-*不生效的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
String類(lèi)的寫(xiě)時(shí)拷貝實(shí)例
下面小編就為大家?guī)?lái)一篇String類(lèi)的寫(xiě)時(shí)拷貝實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
C語(yǔ)言驅(qū)動(dòng)開(kāi)發(fā)內(nèi)核特征碼掃描PE代碼段
這篇文章主要為大家介紹了C語(yǔ)言驅(qū)動(dòng)開(kāi)發(fā)內(nèi)核特征碼掃描PE代碼段,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
C語(yǔ)言實(shí)現(xiàn)掃雷小游戲(適合初學(xué)者)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)掃雷小游戲,適合初學(xué)者練習(xí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03
C語(yǔ)言結(jié)構(gòu)數(shù)組實(shí)現(xiàn)貪吃蛇小游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言結(jié)構(gòu)數(shù)組實(shí)現(xiàn)貪吃蛇小游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
編寫(xiě)C++程序使DirectShow進(jìn)行視頻捕捉
這篇文章主要介紹了如何編寫(xiě)C++程序來(lái)使DirectShow進(jìn)行視頻捕捉的方法,DirectShow是微軟公司在ActiveMovie和Video for Windows的基礎(chǔ)上推出的新一代基于COM(Component Object Model)的流媒體處理的開(kāi)發(fā)包,要的朋友可以參考下2016-03-03

