【问题标题】:Non-resizeable QDialog with fixed size in Qt?Qt中固定大小的不可调整大小的QDialog?
【发布时间】:2010-10-16 07:44:34
【问题描述】:

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

请帮我解决这个问题。

【问题讨论】:

    标签: qt qdialog


    【解决方案1】:

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

    这只适用于windows。

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

    【讨论】:

    • 如果存在可移植解决方案,请不要提供特定于 Windows 的解决方案……
    【解决方案2】:

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

    【讨论】:

    • 在我看来,虽然这避免了调整大小,但您必须事先知道窗口尺寸(这并不总是服从字体更改、屏幕缩放等)。
    【解决方案3】:

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

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

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

    但是用起来会好很多

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

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

    【讨论】:

    • window->layout()->setSizeConstraint( QLayout::SetFixedSize ); 几乎是我需要的,因为它会随着字体等的变化而更新。但我只想修复高度而不是宽度。这可能吗?
    • 你是 MVP。这使得我的 QDialog 不能由用户调整大小,但它仍然会在其内容更改大小时调整大小。
    【解决方案4】:
    this->setFixedSize(this->width(),this->height());
    

    【讨论】:

    • 或者干脆this->setFixedSize(this->size());
    • 或者更简单:) setFixedSize(size());
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

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

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

      这里QmlApplicationViewer是从QDeclarativeView派生而来的。

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

          在代码中你可以做这样的事情,

          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”

          【讨论】:

            【解决方案9】:

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

            将layoutSizeConstraint 设置为SetFixedSize。

            【讨论】:

              【解决方案10】:

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

              this->setMaxiumSize(QSize(0, 0));
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2013-01-19
                • 2014-02-20
                • 1970-01-01
                • 1970-01-01
                • 2019-08-04
                • 2013-08-12
                • 1970-01-01
                相关资源
                最近更新 更多