Qt自定义非模态QDialog仅显示窗口标题 内部控件不展示
Qt非模态对话框仅显示标题、内部控件不展示的问题修复
问题根源
- 对话框内部核心容器未挂载到顶层
代码中创建的centralWidget(承载所有输入控件的QGroupBox)从未被设置为对话框的子控件,也没有为对话框本身配置顶层布局。所有输入类控件都放在这个独立的GroupBox中,而这个GroupBox本身没有被加入到对话框的显示层级里,因此对话框客户区完全空白。 - 按钮布局未绑定到对应容器
创建用于放置操作按钮的buttonsLay(QVBoxLayout)后,没有执行buttonsWidget->setLayout(buttonsLay),即使buttonsWidget被加入界面,内部的三个按钮也没有绑定的布局承载,不会被渲染。 - 遗漏标签的布局挂载
代码中创建的labelDescription没有被加入任何布局,即使前面的问题全部修复,该标签也不会显示。
修复方案
在DialogAddUpdateItem构造函数的对应位置补充缺失逻辑即可,非模态对话框的show()调用、父窗口绑定的写法本身没有问题:
- 为对话框设置顶层布局,挂载
centralWidget,在构造函数末尾添加:QVBoxLayout *dialogMainLay = new QVBoxLayout(this); dialogMainLay->addWidget(centralWidget); - 为按钮容器绑定垂直布局,在
buttonsLay创建完成后补充:buttonsWidget->setLayout(buttonsLay); - 补全描述标签的布局挂载,在
labelDescription创建完成后补充:itemLay->addWidget(labelDescription);
额外优化建议
当前itemLay为水平布局,会将名称输入框、描述输入框、按钮组全部排在同一行,交互合理性较差,可以根据需要调整为垂直布局,调整各控件的伸缩比例。
内容的提问来源于stack exchange,提问作者yarpenzirgin
相关产品推荐
相关产品推荐

