一、Qt Widgets 问题交流
1.QLabel用样式表属性设置文本
在刘典武大佬宝典中看到的有趣的内容,可以用样式表属性设置QLabel的文本
//常规办法
ui->label->setText("hello");
//取巧办法
ui->label->setProperty("text", "hello");
//属性大法
ui->label->setStyleSheet("qproperty-text:hello;");
二、Qt Quick 问题交流
三、其他
1.CMake和qmake判断Qt版本
1.1 CMake:(VERSION_LESS/EQUAL/GREATER三种比较)
if(QT_VERSION VERSION_LESS 5.15.0)
message("< Qt5.15")
else()
message(">= Qt5.15")
endif()
1.2 qmake: https://doc-snapshots.qt.io/qt5-5.15/qmake-test-function-reference.html
Qt5.10 新增 versionAtLeast 和 versionAtMost 函数
if(versionAtLeast(QT_VERSION, 5.15.0)){
message(">= Qt5.15")
}else{
message("< Qt5.15")
}
在更低的版本中可以参考 qtcreator.pri 中定义的函数:(isEqual/lessThan/greaterThan三种比较)
defineTest(minQtVersion) {
maj = $$1
min = $$2
patch = $$3
isEqual(QT_MAJOR_VERSION, $$maj) {
isEqual(QT_MINOR_VERSION, $$min) {
isEqual(QT_PATCH_VERSION, $$patch) {
return(true)
}
greaterThan(QT_PATCH_VERSION, $$patch) {
return(true)
}
}
greaterThan(QT_MINOR_VERSION, $$min) {
return(true)
}
}
greaterThan(QT_MAJOR_VERSION, $$maj) {
return(true)
}
return(false)
}
if(minQtVersion(5,15,0)){
message("ok")
}else{
message("fail")
}
2.Qt6中QSettings默认utf8,移除了setIniCodec接口
QSettings setting("config.ini", QSettings::IniFormat);
//setting.setIniCodec("utf-8"); //Qt6移除该接口,且默认为utf8
setting.setValue("分组/键","中文测试");
utf8时存储的内容:
[%U5206%U7EC4]
%U952E=中文测试
Qt未设置utf8时存储的内容:
[%U5206%U7EC4]
%U952E=\x4e2d\x6587\x6d4b\x8bd5
可见,分组名和键始终不能直接写中文,用的unicode编码