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?

31
demandé sur nostalgk 2013-05-21 18:53:29

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.

18
répondu thuga 2013-08-27 07:27:50

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

  ...
}
24
répondu dsonck92 2015-02-08 21:37:37

One-liner si vous savez exactement ce que la taille de la fenêtre doit être:

this->setFixedSize(QSize(750, 400));
11
répondu TranslucentCloud 2016-12-12 19:10:33

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

7
répondu BuvinJ 2015-11-04 14:26:03

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.

7
répondu Aaron 2017-10-18 03:11:35

cela m'a aidé avec Qt Creator 3.1.1:

this->setFixedSize(this->maximumSize());
3
répondu Rachael 2014-08-06 04:52:38

Si vous utilisez le Qt Creator vous pouvez pour spécifier le même Width et Height de la fenêtre dans le propertiesgeometry,minimumSize et maximumSize.

3
répondu Aleksey Bykov 2015-09-24 07:43:21

Vous pouvez en Qt5 utiliser le code suivant

this->setMinimumSize(sz);
this->setMaximumSize(sz);

où sz est l'objet QSize.

3
répondu Boris Ivanov 2016-08-04 17:10:32

Vous pouvez aussi faire quelque chose comme:

this->setFixedWidth(int);
this->setFixedHeight(int);

les flèches sont parties aussi.

3
répondu GorudoYami 2016-08-05 08:31:21

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.

3
répondu Tushar 2016-08-30 10:19:41

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());
3
répondu ramsudharsan 2017-03-05 03:49:25

setFixedSize(width(), height());

dans votre QMainWindow constructor après la ligne:ui->setupUi(this);.

0
répondu Nik-Lz 2018-08-10 05:15:00

je viens de trouver la réponse. Dans Qt Designer, il suffit de mettre le sizeGripEnabled à false sous statusbar de votre fenêtre. Facile

-4
répondu francis 2014-05-22 02:53:12