web-dev-qa-db-fra.com

QDialog non redimensionnable de taille fixe en Qt?

J'ai une application de dialogue Qt. Maintenant, je ne veux pas que ce dialogue soit redimensionnable. Je ne sais pas comment y parvenir. J'ai essayé beaucoup de choses, mais quand la boîte de dialogue est lancée, elle peut être redimensionnée. 

Quelle est la propriété que je devrais définir pour désactiver le redimensionnement de la boîte de dialogue/widget?.

J'ai aussi essayé

setSizePolicy(QSizePolicy::Fixed);

Mais je reçois une erreur en disant .. 

 source\nimcac_settingsMain.cpp (36): erreur C2248: 
 ** 'QSizePolicy :: QSizePolicy': impossible d'accéder au membre privé déclaré dans la classe 'QSizePolicy' ** 
 p:\ThirdPartyExports\Qt\export\4.3\4.3.1f14\include\QtGui\../../ src\gui\
 kernel\qsizepolicy.h (177): voir la déclaration de 'QSizePolicy :: QSizePolicy' 
 p:\ThirdPartyExports\Qt\export\4.3\4.3.1f14\include\QtGui\../../ src\gui\
 kernel\qsizepolicy.h (34): voir la déclaration de QSizePolicy.

Aidez-moi avec ça.

64
AMM

Je ne sais pas si vous l'avez déjà essayé, mais QWidget::setFixedSize devrait faire ce que vous voulez

49
Caotic

L'erreur de compilation que vous obtenez est due au fait que vous essayez de passer un QSizePolicy::Policy à setSizePolicy(QSizePolicy), mais il n'y a pas de conversion implicite de QSizePolicy::Policy (qui est la politique d'une dimension) à QSizePolicy (qui est une classe contenant, entre autres, un Policy par dimension hauteur largeur)). QSizePolicy ne fonctionne cependant pas sur les widgets de niveau supérieur (fenêtres).

setFixedSize() ne fonctionne que si vous connaissez la taille de la boîte de dialogue à l’avance (et en général vous ne la connaissez pas en changeant la taille et la langue des polices). Tu peux faire

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

mais il vaut beaucoup mieux utiliser

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

Cela permet à la disposition de déterminer la taille de la boîte de dialogue, mais n'autorise pas le redimensionnement, ce que je suppose, c'est ce que vous demandiez.

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

Vous devez modifier le windowFlags de la boîte de dialogue et le définir sur Qt :: MSWindowsFixedSizeDialogHint.

Cela ne fonctionne que dans les fenêtres.

Pour plus d'informations, veuillez consulter cet exemple: http://doc.qt.digia.com/4.5/widgets-windowflags.html

8
Jesus Fernandez

Si vous utilisez QtCreator (vous l’êtes bien entendu), vous pouvez définir la propriété HorizontalsizePolicy sur fixed et la stratégie verticale également sur Fixed. Ensuite, vous pouvez définir la taille maximale aux dimensions souhaitées. La fenêtre ne sera pas agrandie à nouveau.

5
etsoft

Dans le code, vous pouvez faire quelque chose comme ça,

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

Dans QtCreator, procédez comme suit:

  1. Sélectionnez le widget de la boîte de dialogue
  2. Localisez le widget de boîte de dialogue dans la fenêtre d'objet
  3. Dans la fenêtre d'objets, cliquez avec le bouton droit sur l'objet de la boîte de dialogue pour ouvrir un menu.
  4. Sélectionnez "Contraintes de taille" -> "Définir la taille maximale" dans le menu.
  5. Cliquez à nouveau avec le bouton droit sur l'objet de dialogue pour afficher un menu.
  6. Sélectionnez "Contraintes de taille" -> "Définir la taille minimale".
  7. Dans la fenêtre de propriété,
    • s'assurer que "sizePolicy" -> "Horizontal Policy" a la valeur "Fixed"
    • assure que "sizePolicy" -> "Vertical Policy" a la valeur "Fixed"
    • s'assurer que "sizeGripEnabled" n'est pas coché
3
shrikantd

Sous QT Creator, dans l'éditeur d'interface utilisateur, cliquez sur l'objet du haut dans la fenêtre des propriétés, puis faites défiler en bas dans la partie Présentation. Vous devriez voir la propriété layoutSizeConstraint.

Définissez layoutSizeConstraint sur SetFixedSize.

3
jlguenego

Dans la documentation Qt, la méthode setSizePolicy() ne prend aucun argument ou deux arguments mais ne peut pas être un argument. C'est pourquoi vous obtenez cette erreur de compilation. De mon expérience, si vous ne définissez pas la taille fixe. Cette méthode n'a aucune utilité. La fenêtre peut toujours être redimensionnable.

1
PixelsTech

Si vous concevez une interface utilisateur dans QML et lancez à l'aide de QDeclarativeView, essayez le code ci-dessous.

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

QmlApplicationViewer est dérivé de QDeclarativeView.

0
AKN