2009-11-04 82 views
5

我有一个QDialog我正在使用。它有点像QMessageBox。我注意到QMessageBox(及其标签大小)的大小取决于所显示消息的大小。如何根据其子项的文本长度自动调整QDialog的大小?

如何让我的QDialog的尺寸自动调整为QMessageBox?目前我的QDialog包含一个按钮框和一个标签,QDialog是垂直布局。

(我知道我可以只直接使用消息框,但最终我将有更多的复杂的对话。)

回答

13

自动解决方案:

使用布局并将尺寸策略设置为QSizePolicy::Expanding。在QtDesigner中,一旦你所有的孩子都放在你的QDialog上,然后点击调整大小按钮下一个布局的按钮。您的QDialog将在运行时自动调整大小。

手动解决方案:

QWidget类有一个方法adjustSize是调整QWidget的,以适应其内容。只要所有的孩子都放好了就打电话给他。

+1

手动解决方案并不在我的情况下工作:我有一个QTableWidget的,并与2个按钮QHBoxLayout,负责一个QVBoxLayout一个QDialog的,我已经设置了政策对话上扩大,并呼吁adjustSize不会完全没有(看到) – Lars 2013-11-20 10:29:16

+0

在调用adjustSize()之前调用QApplication :: processEvents()是非常重要的,如下所示:http://daniel-albuschat.blogspot.de/2009/08/shrinking-qt-widgets-to-minimum-needed.html – Cerno 2017-11-29 17:18:13

1

设置你的对话框被扩大,和非常小的。然后,请务必在显示对话框之前设置您的信息。显示时,它会根据它包含的对象的大小尝试找到合适的大小。 (这种情况递归,所以如果对话框没有你显示你的消息,使标签与对话之间确保一切都被设置为使用布局标签的直接父。)