Qt - 如何在 Qt Designer 中使 QMainWindow 不可调整大小

5

在Qt Designer中有没有设置QMainWindow为不可调整大小的方法?我看到了很多编程示例,但我希望尽可能多地在Qt Designer中进行UI自定义。到目前为止,我只能通过将最小和最大大小设置为相等来实现这一点,但仍然存在窗口角落的调整箭头和窗口顶部的“最大化”按钮。

6个回答

3

我没有使用Qt Designer;我只是从头开始编写了一个QMainWindow子类。要使窗口不可调整大小的解决方案是在设置好所有小部件和布局后,在QMainWindow上调用setFixedSize。如果您设置得很好,那么您不必手动选择大小;您可以从sizeHint获取大小。我在我的QMainWindow子类内使用的代码行是:

setFixedSize(sizeHint());

我在Windows 8.1上的Qt 5.5中进行了测试,一切都很正常:最大化按钮被禁用,但其他按钮仍然存在,当用户将光标移动到边框时,光标不会指示可以调整大小。

1
这对我不起作用。窗口根本没有显示出来。然而,这个可以:setFixedSize(size()) - RedBox

3
当您选择QMainWindow时,该对象的属性确实包含一个sizePolicy字段,包括水平和垂直方向,就像@jester的答案所提到的那样,您可以将它们设置为fixed。
我发现这并不总是起作用,也不确定原因是什么(可能是由于布局),但正如您发现的,如果将minimumSize和maximumSize字段设置为相同的值,则会实现您想要的效果。
至于调整大小箭头和最大化按钮,我从未能够在Qt Creator(设计师)中做到这一点,因此我认为这是不可能的。但是,在您的类构造函数中只需要一行代码即可:-
setWindowFlags(Qt::Window | Qt::CustomizeWindowHint);

默认情况下,窗口标志包括Qt::WindowMaximizeButtonHint。通过设置上述标志,您表明希望自定义窗口以包含指定的元素。这也将删除最小化按钮,因此如果您也想要它,应该添加Qt :: WindowMinimizeButtonHint。


是的,在这里大小策略不会改变任何东西...我想把所有的UI放在一个文件中,以便更好地实现MVC...但我想没有办法了...非常感谢。 - Michel Feinstein
有了你的代码,我可以同时启用最小化和关闭按钮,但最大化按钮将被禁用并呈灰色,或者干脆没有任何按钮...我只想要最小化和关闭按钮,这可行吗?此外,调整大小的箭头没有消失。 - Michel Feinstein

1

使用 setFixedSize 属性来设置 QMainWindow 的固定大小。在设计师中,如果我没记错的话,您可以将水平和垂直 sizePolicy 设置为 Fixed


就像我之前所说的,我想在Qt Designer中完成它(通过点击菜单和选项进行选择),而你提供的解决方案是一种编码方式。 - Michel Feinstein
@mFeinstein 我记得有一个选项可以设置horizontalSizePolicy和verticalSizePolicy。 - jester
这些策略没有任何变化,在窗口行为方面,我不断地更改它们,但我看不到任何变化... - Michel Feinstein

0

我解决了Qt5的问题,即使窗口大小固定,仍然显示鼠标箭头调整窗口大小,但是这是在Python中完成的,但您可以对C++进行修改。

    MainWindow.setWindowFlags(QtCore.Qt.MSWindowsFixedSizeDialogHint)

请勿在多个帖子中发布相同的答案,如果您认为它们是相同的问题,则可以将其标记为重复。在多个发布中发布相同的答案被认为是噪声。 - eyllanesc

0

这是一篇旧帖子,但如果有人需要,我想提供帮助。 我找到了一种方式(不太美观),但它可以直接从QTDesigner中工作。 您可以通过将高度和宽度的值写入“MinimumSize”和“MaximumSize”属性来锁定调整大小。 显然,还要像其他用户所说的那样在垂直和水平方向上设置“Fixed”。 这将消除放大窗口的按钮。


0

很遗憾,没有这样的选项;在VS中,您可能会在编辑器中找到一个选项,以删除调整窗口大小的鼠标触发器;但由于某种原因,QT5没有这个选项。

我尝试使用sizePolicy并将其设置为mainWindow的固定值;但是这对水平和垂直策略都没有任何作用。

为了解决问题,我将我的mainwindow的minimummaximum大小设置为相同的值;当您运行应用程序时,鼠标光标将无法启用调整大小。

这是一种丑陋的方法来完成如此简单的事情,但这是我在QT设计师中找到的唯一方法,而不使用代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接