75

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

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

我也试过

setSizePolicy(QSizePolicy::Fixed);

但我得到一个错误说..

源\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' 的声明

请帮我解决这个问题。

4

10 回答 10

116

您得到的编译错误是因为您尝试传递 a QSizePolicy::Policyto setSizePolicy(QSizePolicy),但没有从QSizePolicy::Policy(这是一维的策略)到(这是一个包含每个维度(高度、宽度)QSizePolicy一个类等的类)的隐式转换Policy. QSizePolicy不过,无论如何都不适用于顶级小部件(窗口)。

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

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

但使用起来要好得多

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

这让布局确定对话框的大小,但不允许调整大小,我认为这是您所要求的。

于 2009-07-20T05:42:14.427 回答
55

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

于 2009-03-30T14:37:28.350 回答
24
this->setFixedSize(this->width(),this->height());
于 2009-10-14T03:18:27.613 回答
9

您需要更改对话框的 windowFlags 并将其设置为 Qt::MSWindowsFixedSizeDialogHint。

这仅适用于 windows

有关更多信息,请参阅此示例: http ://doc.qt.digia.com/4.5/widgets-windowflags.html

于 2009-03-30T07:33:10.867 回答
6

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

设置layoutSizeConstraintSetFixedSize

于 2014-06-06T12:44:15.780 回答
4

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

于 2012-11-02T21:18:53.093 回答
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”->“Vertical Policy”的值为“Fixed”
    • 确保未选中“sizeGripEnabled”
于 2014-02-01T00:54:40.810 回答
1

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

于 2012-03-08T11:36:59.243 回答
1

一种更简单的方法是将最大尺寸设置为 0。

this->setMaxiumSize(QSize(0, 0));
于 2021-09-02T20:43:07.823 回答
0

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

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

这里的 QmlApplicationViewer 是从 QDeclarativeView 派生的。

于 2012-10-19T09:48:51.187 回答