Frage

Ich habe eine Qt-Dialoganwendung. Jetzt nicht, ich diesen Dialog wollen resizeable sein. Ich bin nicht sicher, wie dies zu erreichen. Ich habe versucht, ein paar Dinge, aber immer noch, wenn der Dialog startet dieser Dialog der Größe verändert werden kann.

Was ist die Eigenschaft, die ich setzen soll den Dialog / Widget ändern.

deaktivieren

Ich habe auch versucht

setSizePolicy(QSizePolicy::Fixed);

Aber ich erhalte eine Fehlermeldung, ..

source\nimcac_settingsMain.cpp(36) : error C2248:
**'QSizePolicy::QSizePolicy' : cannot access private member declared in class 'QSizePolicy'**
        p:\ThirdPartyExports\Qt\export\4.3\4.3.1f14\include\QtGui\../../src\gui\
kernel\qsizepolicy.h(177) : see declaration of 'QSizePolicy::QSizePolicy'
        p:\ThirdPartyExports\Qt\export\4.3\4.3.1f14\include\QtGui\../../src\gui\
kernel\qsizepolicy.h(34) : see declaration of 'QSizePolicy'

Bitte helfen Sie mir mit diesem aus.

War es hilfreich?

Lösung

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

Andere Tipps

Der Compiler-Fehler erhalten Sie, weil Sie versuchen, eine QSizePolicy::Policy passieren setSizePolicy(QSizePolicy), aber es gibt keine implizite Konvertierung von QSizePolicy::Policy (die die Richtlinie für eine Dimension ist) zu QSizePolicy (die eine Klasse enthält, wird unter anderem, ein Policy pro Dimension (Höhe, Breite)). QSizePolicy funktioniert nicht auf der obersten Ebene Widgets (Windows) sowieso, aber.

setFixedSize() funktioniert nur, wenn Sie die Größe des Dialogs im Voraus mit (und in der Regel Sie dies nicht tun, was mit wechselnden Schriftgrößen und Sprachen). Sie können tun,

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

aber es ist viel besser zu nutzen

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

Das läßt das Layout die Größe des Dialogs bestimmen, aber die Größenänderung nicht erlaubt, was ich davon ausgehen, ist das, was Sie fragen.

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

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

Dies funktioniert nur in Windows .

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

Wenn Sie QtCreator verwenden (natürlich sind Sie) Sie die Eigenschaft HorizontalsizePolicy Fixum und Vertikal-Politik auch auf Fest einstellen. Dann können Sie das maximum auf die Abmessungen eingestellt Sie wollen. Das Fenster wird nicht wieder maximieren.

Auf QT Creator, im UI-Editor, klicken Sie auf das oberste Objekt im Eigenschaftenfenster, navigieren Sie dann unten im Layout-Teil. Sie sollten die layoutSizeConstraint Eigenschaft.

Stellen Sie die layoutSizeConstraint auf SetFixedSize.

Code, den Sie so etwas tun kann,

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 Sie wie folgt vor,

  1. Wählen Sie das Dialogfeld-Widget
  2. Suchen Sie das Dialogfeld-Widget in Objektfenster
  3. Sie im Objekt-Fenster mit der rechten klicken Sie auf Dialogfeld Objekt ein Menü Popup
  4. Wählen Sie "Größe Constraints" -> "Maximale Größe" aus dem Menü
  5. Rechtsklick wieder auf Dialog-Objekt ein Menü Popup
  6. Wählen Sie "Größe Constraints" -> "Set Mindestgröße"
  7. Im Eigenschaftenfenster,
    • gewährleisten "sizePolicy" -> "Horizontal Policy" hat den Wert "Fixed"
    • gewährleisten "sizePolicy" -> "Vertical Policy" hat den Wert "Fixed"
    • gewährleisten "sizeGripEnabled" nicht aktiviert ist

Von der Qt-Dokumentation, setSizePolicy() Methode geschieht entweder Null Argument oder zwei Argumente, kann aber nicht ein Argument sein. Deshalb sollten Sie diese Zusammenstellung Fehler. Von meinem Experiment, wenn Sie die feste Größe nicht festlegen. Dieses Verfahren hat keine Verwendung. Das Fenster kann noch veränderbar sein.

Falls Sie UI in QML entwerfen und mit QDeclarativeView werden, versuchen den Code unten.

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

Hier QmlApplicationViewer ist abgeleitet von QDeclarativeView.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top