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

AMM*_*AMM 69 qt qdialog

我有一个Qt对话框应用程序.现在我不希望该对话框可以调整大小.我不知道如何实现这一目标.我尝试了很多东西但仍然在对话框启动时可以调整此对话框的大小.

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

我也试过了

setSizePolicy(QSizePolicy::Fixed);
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误说..

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'

请帮我解决这个问题.

Mar*_*utz 106

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

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

window()->setFixedSize( window()->sizeHint() );
Run Code Online (Sandbox Code Playgroud)

但它使用起来要好得多

window->layout()->setSizeConstraint( QLayout::SetFixedSize );
Run Code Online (Sandbox Code Playgroud)

这让布局决定了对话框的大小,但不允许调整大小,我认为这是你要求的.

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

小智 52

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

  • 在我看来,虽然这可以避免调整大小,但您必须事先知道窗口尺寸(并且这并不总是遵循字体更改、屏幕缩放等)。 (2认同)

Sam*_*mir 23

this->setFixedSize(this->width(),this->height());
Run Code Online (Sandbox Code Playgroud)

  • 甚至更简单:)`setFixedSize(size());` (16认同)
  • 或者只是`this-> setFixedSize(this-> size());` (6认同)

Jes*_*dez 8

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

这仅适用于Windows.

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


jlg*_*ego 6

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

将 设置layoutSizeConstraintSetFixedSize