在Qt中具有固定大小的不可调整大小的QDialog?


72

我有一个Qt对话框应用程序。现在,我不希望该对话框可调整大小。我不确定如何实现这一目标。我尝试了很多事情,但是在对话框启动时仍然可以调整该对话框的大小。

我应设置为禁用对话框/小部件调整大小的属性是什么。

我也试过

setSizePolicy(QSizePolicy::Fixed);

但我说错了..

source \ nimcac_settingsMain.cpp(36):错误C2248:
**'QSizePolicy :: QSizePolicy':无法访问在类'QSizePolicy'中声明的私有成员**
        p:\ ThirdPartyExports \ Qt \ export \ 4.3 \ 4.3.1f14 \ include \ QtGui \ ../../ src \ gui \
kernel \ qsizepolicy.h(177):请参见“ QSizePolicy :: QSizePolicy”的声明
        p:\ ThirdPartyExports \ Qt \ export \ 4.3 \ 4.3.1f14 \ include \ QtGui \ ../../ src \ gui \
kernel \ qsizepolicy.h(34):参见“ QSizePolicy”的声明

请帮助我。

Answers:


55

我不知道您是否已经尝试过,但是QWidget::setFixedSize应该做您想做的


在我看来,尽管这样做可以避免调整大小,但是您必须事先知道窗口的尺寸(而且并不总是服从字体变化,屏幕缩放等)。
Bacco

109

您收到的编译错误是因为您尝试将to传递QSizePolicy::PolicysetSizePolicy(QSizePolicy),但是没有从QSizePolicy::Policy(这是一维的策略)到QSizePolicy(这是一个包含(其中包括)Policy每个维(高度,宽度)的类)的隐式转换。。QSizePolicy但是,它不适用于顶级窗口小部件(Windows)。

setFixedSize()仅当您事先知道对话框的大小时才起作用(通常您不知道对话框的大小,更改字体大小和语言会怎样)。你可以做

window()->setFixedSize( window()->sizeHint() );

但是使用起来更好

window->layout()->setSizeConstraint( QLayout::SetFixedSize );

这样可以由布局确定对话框的大小,但不允许调整大小,我认为这正是您所要的。


2
window->layout()->setSizeConstraint( QLayout::SetFixedSize );几乎是我需要的,因为它会随着字体变化等而更新。但是我只想固定高度,而不是宽度。这可能吗?
VK

您是MVP。这使我的QDialog不能由用户调整大小,但是只要其内容更改大小,它仍然会调整大小。
我一无所知



5

在QT Creator上,在UI编辑器中,单击属性窗口中的顶部对象,然后在“布局”部分的底部滚动。您应该看到layoutSizeConstraint属性。

将设置layoutSizeConstraintSetFixedSize


4

如果使用QtCreator(当然可以),则可以将属性Horizo​​ntalsizePolicy设置为Fixed,将Vertical Policy也设置为Fixed。然后,您可以将maximumSize设置为所需的尺寸。该窗口将不会再次最大化。


2

在代码中,您可以执行以下操作:

Dialog->resize(581, 292);
QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(WaterLevelEditorDialog->sizePolicy().hasHeightForWidth());
Dialog->setSizePolicy(sizePolicy);
Dialog->setMinimumSize(QSize(581, 292));
Dialog->setMaximumSize(QSize(581, 292));
Dialog->setSizeGripEnabled(false);

在QtCreator中执行以下操作,

  1. 选择对话框小部件
  2. 在对象窗口中找到对话框小部件
  3. 在“对象窗口”中,右键单击对话框对象以弹出菜单
  4. 从菜单中选择“大小限制”->“设置最大大小”
  5. 再次右键单击对话框对象以弹出菜单
  6. 选择“大小限制”->“设置最小大小”
  7. 在属性窗口中,
    • 确保“ sizePolicy”->“ Horizo​​ntal Policy”的值为“ Fixed”
    • 确保“ sizePolicy”->“垂直策略”的值为“固定”
    • 确保未选中“ sizeGripEnabled”

1

从Qt文档中,setSizePolicy()方法可以采用零个参数或两个参数,但不能为一个参数。这就是为什么您会收到此编译错误的原因。根据我的实验,如果您未设置固定大小。此方法没有用。窗口仍然可以调整大小。


0

如果您要在QML中设计UI并使用QDeclarativeView启动,请尝试以下代码。

QScopedPointer<QmlApplicationViewer> viewer(QmlApplicationViewer::create());
.
.
.
//To make the window non-resizable
viewer->setFixedSize(viewer->width(),viewer->height());

这里QmlApplicationViewer是从QDeclarativeView派生的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.