Qt - 拖动标题栏时防止窗口调整大小
Posted
技术标签:
【中文标题】Qt - 拖动标题栏时防止窗口调整大小【英文标题】:Qt - Prevent window resize when dragging title bar 【发布时间】:2018-03-11 15:49:46 【问题描述】:我希望我的窗口始终最大化。我尝试设置:
setWindowFlags(Qt::Window | Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint);
(...)
showMaximized();
setMinimumSize(QSize(width(), height()));
setFixedSize(QSize(width(), height()));
所以窗口以最大化打开,但我仍然可以单击其标题栏并将其向下拖动。这样做时,Windows (10) 正在将窗口大小从最大化状态调整为正常状态。
如何为我的窗口禁用此行为?
【问题讨论】:
【参考方案1】:我认为最大化窗口的概念在维护可拖动窗口方面效率较低。相反,将窗口几何形状设置为最大屏幕尺寸,然后您可以根据需要拖动,而无需系统调整窗口大小。
为此,您需要一个 QDesktopWidget
的实例,它提供屏幕的几何信息,例如完整的拉伸宽度/高度。然后只需将您的窗口大小设置为使用这些信息固定即可。
在您的主窗口 .cpp 添加以下内容:
QDesktopWidget* myscreen = QApplication::desktop();
int width = myscreen->width();
int height = myscreen->height();
this->setFixedSize(width, height);
ui->setupUi(this);
... ...
编辑
窗口仍然可以完全跟踪,您仍然可以使用w.showMaximized();
,并且窗口在拖动时不会减小其大小。
【讨论】:
嗯,差不多。如果我使用您的代码,我的窗口将不会停靠,因为它应该处于最大化状态。但是,如果我使用setMinimumSize()
而不是setFixedSize()
,那么它(几乎)可以按我的意愿工作。理想情况下,我想禁用拖动窗口的可能性(因此它总是最大化),但保持其大小相同是足够好的解决方案。
是的,我知道它不会 100% 停靠 .. 两侧留有一小块边距。
顺便说一句,你仍然可以最大化显示你的窗口,它不会在拖动时调整大小【参考方案2】:
由于 Windows 总是会响应用户单击并拖动标题栏,您可以考虑Qt::FramelessWindowHint
。然后根据需要使用您自己的最小化和关闭按钮将您自己的人造标题栏绘制为窗口顶部的矩形。您还需要绘制自己的边框矩形。
【讨论】:
谢谢,但这更像是一种解决方法而不是解决方案。也许这不是很多工作,但对于应该很容易的事情仍然需要做额外的工作。我宁愿保留原来的 Windows 栏。 这不是 Windows 的工作方式...您可能需要通过winID
获取 HWND 并在其上设置一些属性。今晚我会调查一下...
我看到你已经得到了一个接受的答案。但是请检查我的其他答案是否有意义(即MSWindowsFixedSizeDialogHint
标志)。
据我所知,MSWindowsFixedSizeDialogHint
会通过拖动小部件的边缘来禁用调整大小,因此当您设置此标志时不会看到调整大小的箭头。跨度>
【参考方案3】:
使用MSWindowsFixedSizeDialogHint
标志。
setWindowFlags(Qt::MSWindowsFixedSizeDialogHint | Qt::Window | Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint);
【讨论】:
以上是关于Qt - 拖动标题栏时防止窗口调整大小的主要内容,如果未能解决你的问题,请参考以下文章