Dans Qt C++, Comment puis-je désactiver complètement le redimensionnement d'une fenêtre incluant l'icône redimensionner lorsque la souris survole la frontière?
j'ai utilisé:
setFixedSize(size());
pour arrêter le redimensionnement de la fenêtre, mais les flèches redimensionnement apparaissent quand la souris est au-dessus de la bordure de la fenêtre.
y a-t-il un meilleur moyen de désactiver le redimensionnement des fenêtres pour éviter d'afficher les flèches lors du passage de la frontière?
13 réponses
Essayez quelque chose comme ceci:
this->statusBar()->setSizeGripEnabled(false);
si cela ne fonctionne pas, tout ce que vous devez faire est de détecter ce que le widget active QSizeGrip. Vous pouvez le faire en installant un filtre d'événement sur votre application et essayer d'attraper le mouseMoveEvent de QSizeGrip. Puis déboguer son widget parent.
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if(event->type() == QEvent::MouseMove)
{
QSizeGrip *sg = qobject_cast<QSizeGrip*>(obj);
if(sg)
qDebug() << sg->parentWidget();
}
return false;
}
Vous pourriez probablement attraper son spectacle, c'est à vous.
Qt a un windowFlag appelé Qt::MSWindowsFixedSizeDialogHint
pour que. Selon ce que vous voulez exactement, vous souhaitez combiner ce drapeau avec Qt::Widget
, Qt::Window
ou Qt::Dialog
.
void MyDialog::MyDialog()
{
setWindowFlags(Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint);
...
}
One-liner si vous savez exactement ce que la taille de la fenêtre doit être:
this->setFixedSize(QSize(750, 400));
si vous utilisez Qt Designer, définissez les propriétés "sizePolicy" de votre fenêtre À "fixe" dans les directions verticale et horizontale et définissez les dimensions minimales et maximales à des valeurs égales. Ensuite, cliquez-droit sur la fenêtre et sélectionnez "Supprimer la Barre d'État" pour se débarrasser de la "taille de la poignée" dans le coin inférieur droit. Ou, supprimez juste la poignée de taille via la suggestion de francis (plutôt que la barre de statut entière).
j'ai trouvé qu'appeler setSizeConstraint (QLayout::SetFixedSize) sur le layout fonctionnait le mieux pour moi. Plus précisément, à partir D'un constructeur QMainWindow, j'ai appelé:
this->layout()->setSizeConstraint(QLayout::SetFixedSize);
Voici un lien vers la doc: http://doc.qt.io/qt-4.8/qlayout.html#SizeConstraint-enum
(j'utilise Qt 4.8.)
comme c'était aussi un moyen simple de résoudre la question de L'OP, j'ai pensé que je partagerais pour que d'autres considèrent. Il semble qu'il existe de nombreuses façons pour accomplir ceci dans Qt, mais pas tout peut être idéal pour chaque situation. J'ai essayé plusieurs des autres options postées ici, mais ils avaient divers problèmes ou des contraintes dont je n'étais pas satisfait dans ma propre situation.
cela m'a aidé avec Qt Creator 3.1.1:
this->setFixedSize(this->maximumSize());
Si vous utilisez le Qt Creator vous pouvez pour spécifier le même Width
et Height
de la fenêtre dans le properties
geometry
,minimumSize
et maximumSize
.
Vous pouvez en Qt5 utiliser le code suivant
this->setMinimumSize(sz);
this->setMaximumSize(sz);
où sz est l'objet QSize.
Vous pouvez aussi faire quelque chose comme:
this->setFixedWidth(int);
this->setFixedHeight(int);
les flèches sont parties aussi.
Utiliser
setMinimumSize (QSize(width_px, height_px))
setMaximumSize (QSize(width_px, height_px))
où les deux méthodes ont taille de l'.Vous ne verrez pas le curseur redimensionner et la fenêtre ne sera donc pas redimensionnée/maximisée.
si vous souhaitez obtenir les valeurs de largeur et de hauteur à partir du formulaire D'interface utilisateur lui-même sans spécifier manuellement, alors vous pouvez ajouter la commande suivante à l'intérieur de votre classe de projet:
this->setFixedSize(this->width(), this->height());
Vous pouvez également définir des paramètres de largeur et de hauteur (si nécessaire):
this->setFixedWidth(this->width());
this->setFixedHeight(this->height());
setFixedSize(width(), height());
dans votre QMainWindow constructor après la ligne:ui->setupUi(this);
.
je viens de trouver la réponse. Dans Qt Designer, il suffit de mettre le sizeGripEnabled à false sous statusbar de votre fenêtre. Facile