在Qt中,我如何使对话框不可调整大小,但自动调整其大小的内容
In Qt, how do I make a dialog un-resizeable, yet automatically adjusting its size to the contents?
我有一个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();
不幸的是,这似乎并没有改变什么。
这不是您希望得到的答案,它可能不适用于您正在尝试做的事情,但是,我能够在运行时调整QWidget的尺寸的唯一方法是处理对象的resizeEvent(..)方法。这允许我根据使用的字体、行数、可用空间等计算项目的大小,然后在将'event'传递给base resizeEvent(..)方法之前相应地调整它们的大小。
我的方法是在窗口中使用单个QWidget容器,在标题下方,在页脚状态区域上方,在菜单按钮列的右侧。在resizeEvent()调用内部的小部件容器将查看它要显示的对象,计算使用的字体高度,然后根据它们的尺寸调整一些项目的大小(因为样式表如何选择字体和颜色等),然后在允许容器小部件获得resizeEvent()消息之前调整子小部件的尺寸。
所以我对设置窗口大小不太感兴趣,但我认为容器QWidget可能以同样的方式工作?我更感兴趣的是根据显示器的尺寸将尺寸设置为美观的大小。
按正确的顺序做:
-
对话框未显示。
-
计算新尺寸,设置新尺寸
-
设置对话框为不调整大小
-
显示对话框。
-
隐藏对话框,进入第一步
- 如何创建可调整大小和固定大小的容器的变体
- 是否有提供可调整 dpi、可选文本和 CSS 支持的 HTML 到 PDF 渲染器?
- 将添加的列初始化为可调整大小的 2D 向量
- 可滚动的背景,上面有可调整大小的Qt小部件
- 用std::vector编写可调整大小的矢量时出现问题
- 使用固定的顶部坐标创建可调整大小的窗口
- 如何调整可展开对话框的大小
- 灵活的可调整大小的阵列C++
- 如何使Qt小部件可调整大小
- 带有指针的可调整大小数组
- 可调整大小的动态二维阵列的更好解决方案
- wxWidgets可调整大小的窗格
- 如何为Windows应用程序创建可移动/可调整大小/可配置的工具栏
- 在winforms中创建可移动和可调整大小的行
- WinAPI:创建可调整大小的窗口,没有标题栏,但有最小化/最大化/关闭按钮(如Firefox/Chrome/Opera
- 如何在Qt Creator中添加可调整大小的QVBoxLayout ?
- 可调整大小的窗口与可调整大小的圆圈
- 如何使Qt的边框布局项目可调整大小?
- QWidget::setFixedHeight()不工作/仍然可调整大小
- 如何在wxwidgets中创建可调整大小的面板