QDialog模态框中布局的控件不显示问题

img

就加一个QDialog对象dialog,显示请稍后的信息,然后在这段程序运行前加上dialog->show(),运行结束后加上dialog->close(),运行结果却是有弹窗提示框,但布局的控件没显示,解决了吗da哥,我也遇到到了这个问题(来自8年后的后辈)

代码贴出来看看

new出来的控件指定父窗口qDialog

【以下回答由 GPT 生成】

问题分析: 该问题可能是由于布局的控件没有正确添加到对话框中导致的。

解决方法: 1. 确保布局中的控件已添加到对话框中: 检查代码中是否正确将布局中的控件添加到对话框中,可以使用QLayout::addWidget()方法将控件添加到布局中,并使用QDialog::setLayout()方法将布局设置给对话框。示例如下:

QDialog *dialog = new QDialog();
QLabel *label = new QLabel("请稍后");
QVBoxLayout *layout = new QVBoxLayout(dialog);
layout->addWidget(label);
dialog->setLayout(layout);
  1. 确保布局和控件的大小正确设置: 检查布局是否有足够的空间来容纳控件,可以设置布局的setContentsMargins()方法来调整布局的边距。同时,也需确保控件的大小适合布局的大小,可以使用QWidget::setFixedSize()方法设置控件的固定大小。
QDialog *dialog = new QDialog();
QLabel *label = new QLabel("请稍后");
QVBoxLayout *layout = new QVBoxLayout(dialog);
layout->addWidget(label);
layout->setContentsMargins(10, 10, 10, 10);
label->setFixedSize(100, 50);
dialog->setLayout(layout);
  1. 确保对话框正确显示和关闭: 使用QDialog::exec()方法来显示对话框,该方法会将对话框设置为模态对话框,并在关闭对话框后返回一个状态值。在运行结束后,使用QMessageBox::close()方法来关闭对话框。
QDialog *dialog = new QDialog();
QLabel *label = new QLabel("请稍后");
QVBoxLayout *layout = new QVBoxLayout(dialog);
layout->addWidget(label);
dialog->setLayout(layout);
dialog->exec();
dialog->close();

总结: 根据问题描述,应注意将布局中的控件正确添加到对话框中,并设置控件和布局的大小。同时,使用QDialog::exec()方法来显示对话框,并在运行结束后使用QMessageBox::close()方法关闭对话框。如果问题仍未解决,可能需要进一步检查代码逻辑或提供更多相关信息来判断具体原因。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^