75

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」の宣言を参照

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

4

10 に答える 10

116

QSizePolicy::Policy取得するコンパイル エラーは、 toを渡そうとするためですが、(1 つのディメンションのポリシーである) から(特に、ディメンション (高さ、幅) ごとに 1 つを含むクラス) へsetSizePolicy(QSizePolicy)の暗黙的な変換がないためです。 . ただし、最上位のウィジェット (ウィンドウ) では機能しません。QSizePolicy::PolicyQSizePolicyPolicyQSizePolicy

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

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

しかし、使用する方がはるかに優れています

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

これにより、レイアウトでダイアログのサイズを決定できますが、サイズ変更はできません。これは、あなたが求めていたものだと思います。

于 2009-07-20T05:42:14.427 に答える
55

すでに試したかどうかはわかりませんが、QWidget::setFixedSizeやりたいことをする必要があります

于 2009-03-30T14:37:28.350 に答える
24
this->setFixedSize(this->width(),this->height());
于 2009-10-14T03:18:27.613 に答える
9

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

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

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

于 2009-03-30T07:33:10.867 に答える
6

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

を に設定layoutSizeConstraintSetFixedSizeます。

于 2014-06-06T12:44:15.780 に答える
4

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

于 2012-11-02T21:18:53.093 に答える
2

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

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」がチェックされていないことを確認してください
于 2014-02-01T00:54:40.810 に答える
1

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

于 2012-03-08T11:36:59.243 に答える
0

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

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

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

于 2012-10-19T09:48:51.187 に答える