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

时间:2009-03-30 06:42:30

标签: qt qdialog

我有一个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'

请帮我解决这个问题。

9 个答案:

答案 0 :(得分:100)

您获得的编译错误是因为您尝试将QSizePolicy::Policy传递给setSizePolicy(QSizePolicy),但没有从QSizePolicy::Policy(这是一个维度的政策)到{{}的隐式转换1}}(这是一个包含每个维度(高度,宽度)一个QSizePolicy的类。但是,Policy无论如何都不适用于顶级窗口小部件(Windows)。

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

setFixedSize()

但使用

要好得多
window()->setFixedSize( window()->sizeHint() );

这使得布局可以确定对话框的大小,但不允许调整大小,我认为这是你要求的。

答案 1 :(得分:50)

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

答案 2 :(得分:22)

this->setFixedSize(this->width(),this->height());

答案 3 :(得分:8)

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

这仅适用于Windows

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

答案 4 :(得分:4)

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

答案 5 :(得分:3)

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

layoutSizeConstraint设置为SetFixedSize

答案 6 :(得分: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. 选择“尺寸限制” - > “设置最小尺寸”
  8. 在属性窗口中,
    • 确保“sizePolicy” - >“水平政策”的值为“已修复”
    • 确保“sizePolicy” - >“垂直政策”的值为“已修复”
    • 确保未选中“sizeGripEnabled”

答案 7 :(得分:1)

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

答案 8 :(得分:0)

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

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

此处QmlApplicationViewer派生自QDeclarativeView。