在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(当然你是)你可以设置属性HorizontalsizePolicy固定和垂直策略也固定。 然后,您可以将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中做如下,
- select对话框小部件
- 在对象窗口中find对话框小部件
- 在对象窗口中,右键单击对话框对象以popup菜单
- 从菜单中select“Size Constraints” – >“Set Maximum Size”
- 再次右击对话框对象来popup一个菜单
- select“尺寸约束” – >“设置最小尺寸”
- 在属性窗口中,
- 确保“sizePolicy” – >“Horizontal 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。