wake-up-neo.com

Nicht skalierbarer QDialog mit fester Größe in Qt?

Ich habe eine Qt-Dialoganwendung. Jetzt möchte ich nicht, dass der Dialog anpassbar ist. Ich bin nicht sicher, wie ich das erreichen kann. Ich habe ein paar Dinge ausprobiert, aber wenn das Dialogfeld gestartet wird, kann dieses Dialogfeld in der Größe geändert werden. 

Was ist die Eigenschaft, die ich setzen sollte, um die Größe des Dialogs/Widgets zu deaktivieren.

Ich habe es auch versucht

setSizePolicy(QSizePolicy::Fixed);

Aber ich bekomme eine Fehlermeldung .. 

 source\nimcac_settingsMain.cpp (36): Fehler C2248: 
 ** 'QSizePolicy :: QSizePolicy': Kein Zugriff auf private Member, die in der Klasse 'QSizePolicy' deklariert sind. ** 
 p:\ThirdPartyExports\Qt\export\4.3\4.3.1f14\include\QtGui\../../ src\gui\
 kernel\qsizepolicy.h (177): siehe Deklaration von 'QSizePolicy :: QSizePolicy' 
 p:\ThirdPartyExports\Qt\export\4.3\4.3.1f14\include\QtGui\../../ src\gui\
 kernel\qsizepolicy.h (34): siehe Deklaration von 'QSizePolicy' 

Helfen Sie mir bitte dabei.

64
AMM

Ich weiß nicht, ob Sie es schon probiert haben, aber QWidget::setFixedSize sollte tun, was Sie wollen

49
Caotic

Der Kompilierungsfehler, den Sie erhalten, besteht darin, dass Sie versuchen, einen QSizePolicy::Policy an setSizePolicy(QSizePolicy) zu übergeben, es gibt jedoch keine implizite Konvertierung von QSizePolicy::Policy (dies ist die Richtlinie für eine Dimension) in QSizePolicy (eine Klasse, die unter anderem eine Policy pro Dimension enthält ( Höhe Breite)). QSizePolicy funktioniert jedoch sowieso nicht für Widgets der obersten Ebene (Fenster).

setFixedSize() funktioniert nur, wenn Sie die Größe des Dialogs im Voraus kennen (und dies normalerweise nicht, wenn Sie die Schriftgrößen und -sprachen ändern). Du kannst tun

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

aber es ist viel besser zu benutzen

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

Auf diese Weise kann das Layout die Größe des Dialogfelds bestimmen, jedoch keine Größenänderung zulassen.

98
this->setFixedSize(this->width(),this->height());
22
Samir

Sie müssen die windowFlags des Dialogfelds ändern und auf Qt :: MSWindowsFixedSizeDialogHint setzen.

Dies funktioniert nur in Windows.

Weitere Informationen finden Sie in diesem Beispiel: http://doc.qt.digia.com/4.5/widgets-windowflags.html

8
Jesus Fernandez

Wenn Sie QtCreator verwenden (natürlich), können Sie die Eigenschaft HorizontalsizePolicy auf Fixed und Vertical Policy auch auf Fixed setzen. Dann können Sie die Maximalgröße auf die gewünschten Abmessungen einstellen. Das Fenster wird nicht erneut maximiert.

5
etsoft

Im Code kannst du so etwas tun,

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);

In QtCreator gehen Sie wie folgt vor:

  1. Wählen Sie das Dialogfeld-Widget aus
  2. Suchen Sie das Dialogfeld-Widget im Objektfenster
  3. Klicken Sie im Objektfenster mit der rechten Maustaste auf das Dialogfeld Objekt, um ein Menü zu öffnen
  4. Wählen Sie im Menü "Größenbeschränkungen" -> "Maximale Größe festlegen"
  5. Klicken Sie erneut mit der rechten Maustaste auf das Dialogobjekt, um ein Menü zu öffnen
  6. Wählen Sie "Größenbeschränkungen" -> "Mindestgröße festlegen".
  7. Im Eigenschaftsfenster
    • sicherstellen, dass "sizePolicy" -> "Horizontal Policy" den Wert "Fixed" hat
    • sicherstellen, dass "sizePolicy" -> "Vertical Policy" den Wert "Fixed" hat
    • stellen Sie sicher, dass "sizeGripEnabled" nicht aktiviert ist
3
shrikantd

Klicken Sie in QT Creator im UI-Editor im Eigenschaftenfenster auf das obere Objekt und scrollen Sie anschließend im Layoutbereich nach unten. Sie sollten die Eigenschaft layoutSizeConstraint sehen.

Setzen Sie layoutSizeConstraint auf SetFixedSize.

3
jlguenego

In der Qt-Dokumentation nimmt die setSizePolicy()-Methode entweder ein Null-Argument oder zwei Argumente an, kann jedoch kein einziges Argument sein. Deshalb erhalten Sie diesen Kompilierungsfehler. Von meinem Experiment aus, wenn Sie die feste Größe nicht einstellen. Diese Methode hat keine Verwendung. Das Fenster kann noch in der Größe verändert werden.

1
PixelsTech

Falls Sie eine Benutzeroberfläche in QML entwerfen und mit QDeclarativeView starten, versuchen Sie es mit dem folgenden Code.

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

Hier wird QmlApplicationViewer von QDeclarativeView abgeleitet.

0
AKN