Qt Designer 5.11.1生成代码调用QFont::setWeight传int编译报错咨询
问题根因
这个报错是Qt 6早期版本中uic(用户界面编译器,负责将Qt Designer的.ui文件转换为C++代码的工具)的兼容性问题导致的:Qt 6将QFont::Weight从原来的int类型别名改为了强类型枚举,但是对应版本的uic生成代码时没有对传入的字重数值做类型转换,直接传入int值,不符合强类型枚举的传参要求,因此触发编译错误。
1. 是否属于Qt Designer的bug
是,这是Qt 6.0~Qt 6.1版本范围内的已知官方bug,问题出在uic的代码生成逻辑,和Qt Designer的配置操作无关。
2. 能否在Qt Designer中通过配置解决
可以,无需修改自动生成的ui代码,可通过以下两种方式规避:
- 改用样式表设置字体:在Qt Designer中选中对应控件,删除属性面板中字体相关的自定义配置,改为在样式表中添加如下规则:
这种方式下uic只会生成样式表设置代码,不会触发font: bold 16pt "Times New Roman";setWeight的类型转换错误。 - 业务代码后置修改字体:不在Qt Designer中设置该控件的粗体/字重属性,保留字体家族、字号的配置,在对应窗口类的构造函数中,
setupUi调用之后添加代码修改字重:QFont font = ui->titleLabel->font(); font.setBold(true); font.setWeight(QFont::Weight(75)); ui->titleLabel->setFont(font);
3. 高版本是否已修复
是,该bug在Qt 6.2.0及后续版本中已经完成修复,对应版本的uic生成setWeight相关代码时,会自动添加QFont::Weight()的强制类型转换,不会再触发该编译错误。
内容的提问来源于stack exchange,提问作者Doug Fulford
相关产品推荐
相关产品推荐

