75 votes

QDialog non redimensionnable avec une taille fixe dans 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é un tas de choses, mais quand le dialogue est lancé, il peut être redimensionné.

Quelle est la propriété que je dois définir pour désactiver le redimensionnement du dialogue/du widget ?

J'ai aussi essayé

setSizePolicy(QSizePolicy::Fixed);

Mais je reçois une erreur disant..

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'

Je vous prie de m'aider.

116voto

Marc Mutz - mmutz Points 10367

L'erreur de compilation que vous obtenez est due au fait que vous essayez de passer un fichier de type QSizePolicy::Policy a setSizePolicy(QSizePolicy) mais il n'y a pas de conversion implicite à partir de QSizePolicy::Policy (qui est la politique pour une seule dimension) à QSizePolicy (qui est une classe contenant, entre autres, une Policy par dimension (hauteur, largeur)). QSizePolicy ne fonctionne pas sur les widgets de niveau supérieur (Windows) de toute façon.

setFixedSize() ne fonctionne que si vous connaissez à l'avance la taille de la boîte de dialogue (ce qui n'est généralement pas le cas, compte tenu des changements de taille de police et de langue). Vous pouvez faire

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

mais il est préférable d'utiliser

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

Cela laisse la mise en page déterminer la taille de la boîte de dialogue, mais ne permet pas de la redimensionner, ce qui, je suppose, est ce que vous demandiez.

2 votes

window->layout()->setSizeConstraint( QLayout::SetFixedSize ); est presque ce dont j'ai besoin car il se met à jour en changeant de police, etc. Mais je voudrais fixer uniquement la hauteur et non la largeur. Est-ce possible ?

0 votes

Vous êtes le MVP. Ainsi, mon QDialog n'est pas redimensionnable par l'utilisateur, mais il se redimensionne quand même lorsque son contenu change de taille.

55voto

Caotic Points 686

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

2 votes

Il me semble que même si cela permet d'éviter le redimensionnement, il faut connaître à l'avance les dimensions de la fenêtre (et cela n'obéit pas toujours aux changements de police, à la mise à l'échelle de l'écran et ainsi de suite).

24voto

Samir Points 720
this->setFixedSize(this->width(),this->height());

8 votes

Ou simplement this->setFixedSize(this->size());

19 votes

Ou même plus simple :) setFixedSize(size());

9voto

Jesus Fernandez Points 916

Vous devez modifier le windowFlags de la boîte de dialogue et lui attribuer la valeur Qt::MSWindowsFixedSizeDialogHint.

Cela ne fonctionne que sous Windows .

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

0 votes

Veuillez ne pas fournir de solutions spécifiques à Windows lorsque des solutions portables existent

4voto

etsoft Points 41

Si vous utilisez QtCreator (bien sûr), vous pouvez définir la propriété HorizontalsizePolicy sur Fixed et Vertical Policy également sur Fixed. Ensuite, vous pouvez définir le maximumSize aux dimensions que vous souhaitez. La fenêtre ne sera plus maximisée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X