QDialog non redimensionnable avec une taille fixe dans Qt?
Question
J'ai une application Qt dialogue. Maintenant, je ne veux pas cette boîte de dialogue pour être redimensionnable. Je ne suis pas sûr de savoir comment y parvenir. J'ai essayé un tas de choses, mais encore quand la boîte de dialogue lance cette boîte de dialogue peut être redimensionnée.
Quelle est la propriété que je dois mettre désactiver la boîte de dialogue / Widget redimensionner.
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'
Veuillez me aider avec cela.
La solution
Je ne sais pas si vous avez déjà essayé, mais QWidget::setFixedSize
dois faire ce que vous voulez
Autres conseils
L'erreur de compilation que vous obtenez est parce 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 pas sur les widgets de haut niveau (fenêtres) de toute façon, cependant.
setFixedSize()
ne fonctionne que si vous connaissez la taille de la boîte de dialogue à l'avance (et le plus souvent que vous ne le faites pas, ce qui à l'évolution des tailles de police et langues). Vous pouvez faire
window()->setFixedSize( window()->sizeHint() );
mais il est préférable d'utiliser
window->layout()->setSizeConstraint( QLayout::SetFixedSize );
qui permet la mise en page de déterminer la taille de la boîte de dialogue, mais ne permet pas le redimensionnement, que je suppose est ce que vous demandez.
this->setFixedSize(this->width(),this->height());
Vous devez modifier les windowFlags de la boîte de dialogue et le mettre à Qt :: MSWindowsFixedSizeDialogHint.
Cela ne fonctionne que dans les fenêtres .
Pour plus d'informations s'il vous plaît voir cet exemple: http://doc.qt.digia.com/4.5/widgets-windowflags. html
Si vous utilisez QtCreator (vous êtes bien sûr) vous pouvez définir la propriété HorizontalsizePolicy à fixe et verticale politique aussi fixe. Ensuite, vous pouvez régler la maximumSize aux dimensions que vous souhaitez. La fenêtre ne sera pas à nouveau maximiser.
Le QT Creator, dans l'éditeur d'interface utilisateur, cliquez sur l'objet du dessus dans la fenêtre des propriétés, puis faites défiler en bas dans la partie de la mise en page. Vous devriez voir la propriété layoutSizeConstraint.
Régler la layoutSizeConstraint
à SetFixedSize
.
Dans le code que 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,
- Sélectionnez le widget boîte de dialogue
- Recherchez le widget boîte de dialogue dans la fenêtre d'objets
- Dans la fenêtre d'objet, faites un clic droit sur l'objet de boîte de dialogue pour faire apparaître un menu
- Sélectionnez "contraintes de taille" -> "Définir la taille maximale" dans le menu
- Faites un clic droit sur l'objet à nouveau dialogue pour faire apparaître un menu
- Sélectionnez "contraintes de taille" -> "Définir la taille minimum"
- Dans la fenêtre Propriété,
- assurer "sizePolicy" -> "politique horizontale" a une valeur "fixe"
- assurer "sizePolicy" -> "verticale politique" a une valeur "fixe"
- assurer "sizeGripEnabled" est pas cochée
A partir de la documentation Qt, la méthode de setSizePolicy()
soit nul ou prend l'argument deux arguments, mais ne peut pas être un argument. Voilà 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 pas d'utilisation. La fenêtre peut toujours être redimensionnée.
Dans le cas où vous concevez l'interface utilisateur en QML et le lancement à l'aide QDeclarativeView, essayez le code ci-dessous.
QScopedPointer<QmlApplicationViewer> viewer(QmlApplicationViewer::create());
.
.
.
//To make the window non-resizable
viewer->setFixedSize(viewer->width(),viewer->height());
Ici QmlApplicationViewer est dérivé de QDeclarativeView.