0

我有一个 QDialog 实例,由使用 uic 生成的代码的小部件填充。该对话框包含一些垂直布局的标签,我不时弹出对话框以在这些标签中显示一些文本。文本可以是多行的,并且它的长度不是预先确定的。我将垂直大小策略设置为固定,因此用户无法拖动它(没有意义),但我还希望对话框在显示之前更改其大小以适应标签的当前大小。

为此,我在显示之前在 QDialog 上调用 QWidget::adjustSize() ,但它没有按预期工作。显示对话框时,它似乎保留了先前显示的(错误)大小,但是当我在(禁用)垂直调整大小模式下单击鼠标时,对话框突然“捕捉”到(正确)调整后的大小。

有什么方法可以让我的对话框正确显示吗?

编辑:我捆绑了 rubenvb 的建议,最后得到了这个:

QSizePolicy free(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
QSizePolicy fixed(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
dialog->setSizePolicy(free);
dialog->adjustSize();
dialog->setSizePolicy(fixed);
dialog->show();

不幸的是,这似乎并没有改变任何事情。

4

2 回答 2

0

这不是您希望的答案,它可能不适用于您尝试做的事情,但是,我能够在运行时调整 QWidget 尺寸的唯一方法是处理对象的 resizeEvent(..) 方法。这让我可以根据所使用的字体、行数、可用空间等计算项目的大小,然后在将“事件”传递给基本的 resizeEvent(..) 方法之前相应地调整它们的大小。

我的方法在窗口内、页眉下方、页脚状态区域上方以及菜单按钮列的右侧使用了单个 QWidget 容器。小部件容器,在 resizeEvent() 调用中,将查看它要显示的对象,计算正在使用的字体高度,然后根据它们的尺寸调整一些项目的大小(因为样式表如何选择字体和颜色,等),然后在允许容器小部件获取 resizeEvent() 消息之前调整子小部件尺寸。

所以我对设置窗口大小不是很感兴趣,但我认为容器 QWidget 可能会以同样的方式工作?我更感兴趣的是根据显示器的尺寸将尺寸设置为一些美观的尺寸。

希望对您有所帮助。

于 2011-04-25T17:10:00.280 回答
0

按正确的顺序做所有事情:

  1. 对话框未显示。对话框是可调整大小的。

  2. 计算新尺寸,设置新尺寸。

  3. 将对话框设置为不可调整大小。

  4. 显示对话框。

  5. 隐藏对话框,转到第一步。

于 2011-04-25T17:10:24.017 回答