如何摆脱 QDialog 中的调整大小句柄?

Posted

技术标签:

【中文标题】如何摆脱 QDialog 中的调整大小句柄?【英文标题】:How can I get rid of the resize-handle in a QDialog? 【发布时间】:2010-10-09 04:26:47 【问题描述】:

我有以下课程:

class SelectDateDialog(QDialog):
    startDate = date.today()
    endDate = date.today()

    def __init__(self, text, isInterval = False):
        QDialog.__init__(self)
        uic.loadUi("resources/SelectDate.ui", self)

现在,该对话框在 Mac OS X 10.5 上可以调整大小,但不应该如此。它在右下角有调整大小的句柄。

我已经尝试过setSizeGripEnabled 函数,它没有改变任何东西。

如何让它无法调整大小?

【问题讨论】:

为什么要阻止对话框调整大小?我想不出固定大小比调整大小更好的情况,但也许我遗漏了一些东西。 这是一种只陈述消息的对话框。这看起来更好,感觉更像是一个 Mac OS X 程序。 QMessageBox 做得对。 【参考方案1】:

如果你想要一个不可调整大小的 QDialog dlg, 然后设置

dlg.setWindowFlags(Qt::MSWindowsFixedSizeDialogHint);

【讨论】:

【参考方案2】:

我使用以下代码来修复QDialog 的大小:

layout()->setSizeConstraint( QLayout::SetFixedSize ) ;
setSizeGripEnabled( false ) ;

第一行根据布局中包含的小部件的首选大小强制布局大小。第二行删除了实际的抓地力。

要扭转这种情况,您可以在布局上设置默认约束并重新启用尺寸夹点。

【讨论】:

【参考方案3】:

使窗口或对话框不可调整大小的最简洁方法是将其布局的大小约束设置为 QLayout.SetFixedSize(或 C++ 中的 QLayout::SetFixedSize)。您只需对窗口中的主布局执行此操作 - 包含所有其他小部件和布局的布局。

我看到您正在使用 Qt Designer 为您的对话框创建用户界面。打开 .ui 文件并选择窗口,然后在属性编辑器中向下滚动,直到看到 Layout 部分。将 layoutSizeConstraint 属性设置为 SetFixedSize。

预览表单时,对话框内的小部件应正确排列,但无法调整对话框大小。

【讨论】:

有关 Qt Designer 的信息有所帮助。谢谢!【参考方案4】:

无论出于何种原因,我总是必须执行以下操作(在 Qt 设计器中)以绝对确定无法调整窗口大小:

sizePolicy -> Horizontal Policy = Fixed
sizePolicy -> Vertical Policy = Fixed

minimumSize -> Width = X
minimumSize -> Height = Y

maximumSize -> Width = X
maximumSize -> Height = Y

请注意,我选择 X 和 Y 来说明 minimumSize == maximumSize。当您这样做时,调整大小句柄应该自行消失,尽管我已经看到至少有一个 Linux 发行版保留了该句柄。在那种特殊情况下,我们只是隐藏了句柄,因为它无论如何都无法调整窗口大小。

【讨论】:

以上是关于如何摆脱 QDialog 中的调整大小句柄?的主要内容,如果未能解决你的问题,请参考以下文章

使用调整对话框大小的动画后如何修复 QDialog 的大小?

如何使用子窗口中的句柄获取父窗口的调整大小事件?

JQuery UI:如何将调整大小句柄放置在容器中的其他位置?

将组件添加到子小部件后调整 QDialog 的大小

真正从 <textarea> 中删除调整大小句柄

在textarea的右下角有一个小针脚,允许用户调整盒子的大小,我如何只用一个反应文件来摆脱它?