web-dev-qa-db-ja.com

Qtで固定サイズのサイズ変更できないQDialog?

Qtダイアログアプリケーションがあります。今、私はそのダイアログのサイズを変更したくありません。これを達成する方法がわかりません。いろいろ試してみましたが、それでもダイアログが起動したときにこのダイアログのサイズを変更できます。

ダイアログ/ウィジェットのサイズ変更を無効にするために設定する必要があるプロパティは何ですか。

私も試しました

setSizePolicy(QSizePolicy::Fixed);

しかし、次のようなエラーが表示されます。

 source\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」

これで私を親切に助けてください。

69
AMM

すでに試してみたかどうかはわかりませんが、QWidget::setFixedSizeあなたがしたいことをすべき

52
Caotic

コンパイルエラーは、_QSizePolicy::Policy_をsetSizePolicy(QSizePolicy)に渡そうとしているが、_QSizePolicy::Policy_(1つのディメンションのポリシー)からQSizePolicy(これに暗黙的に変換されないため)とりわけ、次元(高さ、幅)ごとに1つのPolicyを含むクラスです。とにかく、QSizePolicyはトップレベルのウィジェット(ウィンドウ)では機能しません。

setFixedSize()は、ダイアログのサイズが事前にわかっている場合にのみ機能します(通常は、フォントサイズと言語の変更に関してはわかりません)。できるよ

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

しかし、それは使用する方がはるかに良いです

_window->layout()->setSizeConstraint( QLayout::SetFixedSize );
_

これにより、レイアウトでダイアログのサイズを決定できますが、サイズ変更は許可されません。

105
this->setFixedSize(this->width(),this->height());
23
Samir

ダイアログのwindowFlagsを変更し、Qt :: MSWindowsFixedSizeDialogHintに設定する必要があります。

これはWindowsでのみ機能します

詳細については、この例を参照してください。 http://doc.qt.digia.com/4.5/widgets-windowflags.html

8
Jesus Fernandez

QtCreatorを使用している場合(もちろんあなたもそうです)、Horizo​​ntalsizePolicyプロパティをfixedに、Vertical PolicyもFixedに設定できます。その後、maximumSizeを必要な寸法に設定できます。ウィンドウは再び最大化されません。

4
etsoft

QT CreatorのUIエディターで、プロパティウィンドウの上部のオブジェクトをクリックし、レイアウトパーツの下部をスクロールします。 layoutSizeConstraintプロパティが表示されます。

layoutSizeConstraintSetFixedSizeに設定します。

3
jlguenego

コードでは、次のようなことができます。

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」がチェックされていないことを確認してください
2
shrikantd

Qtのドキュメントによると、setSizePolicy()メソッドは引数がゼロまたは2つの引数を取りますが、1つの引数を取ることはできません。そのため、このコンパイルエラーが発生します。私の実験から、固定サイズを設定しない場合。この方法には意味がありません。ウィンドウはサイズ変更可能です。

1
PixelsTech

QMLでUIを設計し、QDeclarativeViewを使用して起動する場合は、以下のコードを試してください。

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

ここで、QmlApplicationViewerはQDeclarativeViewから派生しています。

0
AKN