我有一个 Qt 对话框应用程序。现在我不希望该对话框可调整大小。我不确定如何实现这一目标。我尝试了很多东西,但是当对话框启动时,这个对话框仍然可以调整大小。
我应该设置什么属性来禁用对话框/小部件调整大小。
我也试过
setSizePolicy(QSizePolicy::Fixed);
但我得到一个错误说..
source\nimcac_settingsMain.cpp(36) : error C2248: **'QSizePolicy::QSizePolicy' : cannot access private member declared in class 'QSizePolicy'** p:\ThirdPartyExports\Qt\export\4.3\4.3.1f14\include\QtGui\../../src\gui\ kernel\qsizepolicy.h(177) : see declaration of 'QSizePolicy::QSizePolicy' p:\ThirdPartyExports\Qt\export\4.3\4.3.1f14\include\QtGui\../../src\gui\ kernel\qsizepolicy.h(34) : see declaration of 'QSizePolicy'
请帮我解决这个问题。
您得到的编译错误是因为您尝试将 QSizePolicy::Policy
传递给 setSizePolicy(QSizePolicy)
,但没有从 QSizePolicy::Policy
(这是一维的策略)到 QSizePolicy
(这是一个包含的类,其中其他东西,每个维度(高度、宽度)一个 Policy
)。但是,QSizePolicy
无论如何都不适用于顶级小部件(窗口)。
setFixedSize()
仅在您事先知道对话框的大小时才有效(通常您不知道,更改字体大小和语言会怎样)。你可以做
window()->setFixedSize( window()->sizeHint() );
但使用起来要好得多
window->layout()->setSizeConstraint( QLayout::SetFixedSize );
这让布局确定对话框的大小,但不允许调整大小,我认为这是您所要求的。
我不知道您是否已经尝试过,但 QWidget::setFixedSize
应该做您想做的事
this->setFixedSize(this->width(),this->height());
this->setFixedSize(this->size());
setFixedSize(size());
您需要更改对话框的 windowFlags 并将其设置为 Qt::MSWindowsFixedSizeDialogHint。
这仅适用于 Windows。
有关详细信息,请参阅此示例:http://doc.qt.digia.com/4.5/widgets-windowflags.html
在 QT Creator 的 UI 编辑器中,单击属性窗口中的顶部对象,然后在 Layout 部分的底部滚动。您应该看到 layoutSizeConstraint 属性。
将 layoutSizeConstraint
设置为 SetFixedSize
。
如果您使用 QtCreator(当然是),您可以将属性 HorizontalsizePolicy 设置为 fixed,并将 Vertical Policy 也设置为 Fixed。然后您可以将 maximumSize 设置为您想要的尺寸。窗口不会再次最大化。
在代码中你可以做这样的事情,
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 中执行以下操作,
选择对话框小部件 在对象窗口中找到对话框小部件 在对象窗口中,右键单击对话框对象以弹出菜单 从菜单中选择“Size Constraints”->“Set Maximum Size” 再次右键单击对话框对象以弹出菜单a menu Select "Size Constraints" -> "Set Minimum Size" 在属性窗口中,确保 "sizePolicy"->"Horizontal Policy" 的值为 "Fixed" 确保 "sizePolicy"->"Vertical Policy" 的值为 "Fixed" 确保 " sizeGripEnabled" 未选中
在 Qt 文档中,setSizePolicy()
方法采用零参数或两个参数,但不能是一个参数。这就是您收到此编译错误的原因。根据我的实验,如果您不设置固定大小。这种方法没有用。窗口仍然可以调整大小。
一种更简单的方法是将最大尺寸设置为 0。
this->setMaxiumSize(QSize(0, 0));
如果您在 QML 中设计 UI 并使用 QDeclarativeView 启动,请尝试以下代码。
QScopedPointer<QmlApplicationViewer> viewer(QmlApplicationViewer::create());
.
.
.
//To make the window non-resizable
viewer->setFixedSize(viewer->width(),viewer->height());
这里的 QmlApplicationViewer 是从 QDeclarativeView 派生的。
window->layout()->setSizeConstraint( QLayout::SetFixedSize );
几乎是我所需要的,因为它会随着字体等的变化而更新。但我只想修复高度而不是宽度。这可能吗?