在Qt中具有固定大小的不可resize的QDialog?

我有一个Qt对话框应用程序。 现在我不希望这个对话框可以resize。 我不知道如何做到这一点。 我尝试了一堆的东西,但仍然当对话框启动这个对话框可以resize。

什么是我应该设置禁用对话框/小部件resize的属性。

我也试过了

setSizePolicy(QSizePolicy::Fixed); 

但是我得到一个错误说..

源\ nimcac_settingsMain.cpp(36):错误C2248:
 **'QSizePolicy :: QSizePolicy':无法访问类'QSizePolicy'中声明的私有成员**
        号码:\ ThirdPartyExports \ Qt的\出口\ 4.3 \ 4.3.1f14 \包括\ QtGui \ ../../ SRC \ GUI \
 kernel \ qsizepolicy.h(177):参见'QSizePolicy :: QSizePolicy'声明
        号码:\ ThirdPartyExports \ Qt的\出口\ 4.3 \ 4.3.1f14 \包括\ QtGui \ ../../ SRC \ GUI \
 kernel \ qsizepolicy.h(34):参见'QSizePolicy'声明

请帮我解决这个问题。

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

您得到的编译错误是因为您尝试将QSizePolicy::Policy传递给setSizePolicy(QSizePolicy) ,但是没有将QSizePolicy::Policy (这是一个维度的策略)隐式转换为QSizePolicy (它是一个包含,除其他外,每个维度(高度,宽度)一个Policy )。 QSizePolicy在顶级窗口小部件(Windows)上不起作用。

setFixedSize()只有在事先知道对话框的大小时才起作用(通常你不知道,改变字体大小和语言)。 你可以做

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

但使用起来更好

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

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

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

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

这只适用于Windows

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

如果你使用QtCreator(当然你是)你可以设置属性Horizo​​ntalsizePolicy固定和垂直策略也固定。 然后,您可以将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中做如下,

  1. select对话框小部件
  2. 在对象窗口中find对话框小部件
  3. 在对象窗口中,右键单击对话框对象以popup菜单
  4. 从菜单中select“Size Constraints” – >“Set Maximum Size”
  5. 再次右击对话框对象来popup一个菜单
  6. select“尺寸约束” – >“设置最小尺寸”
  7. 在属性窗口中,
    • 确保“sizePolicy” – >“Horizo​​ntal Policy”的值为“Fixed”
    • 确保“sizePolicy” – >“Vertical Policy”具有“固定”
    • 确保“sizeGripEnabled”没有被选中

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

layoutSizeConstraint设置为SetFixedSize

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

如果您在QML中deviseUI并使用QDeclarativeView启动,请尝试下面的代码。

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

这里QmlApplicationViewer派生自QDeclarativeView。