7
votes

Comment définir la taille initiale (par défaut) qdockwidget dans l'application sans widget central (PYQT4)?

J'ai une application avec beaucoup de qdockwidgets et sans widget central. Je tiens à définir certaines de ces QdockWidgets Taille initiale ( taille au début de l'application), mais je ne veux pas limiter leurs tailles min / max.

Comment faire? Par exemple, j'ai besoin de définir la taille initiale 150x75 à l'une d'elles. J'ai essayé des méthodes évidentes (telles que qwidget.Resize ( ) relatif au contenu du widget Dock), mais cela n'a pas fonctionné du tout.

Voici un modèle de situation simplifié: xxx


3 commentaires

qmainwindow doit toujours avoir un widget central, mais vous pouvez essayer de définir sa taille sur 0.


@alexisdm, eh bien, comment faire ça? Pouvez-vous s'il vous plaît poster du code qui peut m'aider? Merci!


Par exemple, avec mw.sepentralqwidget (qwidget ()) et mw.centralwidget (). SetfixedSize (0,0) . Cette question montre le type de problèmes que vous pouvez avoir sans régler le widget central.


3 Réponses :


11
votes

Les dockwidgets seront intégrés à la disposition de la fenêtre principale, de sorte que toute tentative de redimensionnement sera ignorée.

La solution de contournement standard pour cela consiste à créer une sous-classe du widget de contenu et de répliquer son Samethint CODE>: P>

class TreeWidget(QtGui.QTreeWidget):
    def sizeHint(self):
        return QtCore.QSize(150, 75)

mw.dockWdg2 = QtGui.QDockWidget(mw)
mw.content2 = TreeWidget()
mw.dockWdg2.setWidget(mw.content2)


0 commentaires

1
votes

Utilisez la fonction FixeSize, comme SetfixedWidth / Setfixedheight.


1 commentaires

Cela contient le widget à exactement cette taille; L'affiche originale voulait juste la taille par défaut, pas la taille minimale et maximale à définir.



0
votes

Je pense que je pense que la fonction TailleHint () code> basée sur la taille de Mainwindow est meilleure que de retourner une taille fixe.

Code source P>

// size hint
QSize RenderWindow::sizeHint() const
{
    float width = MainWindow::instance()->width() * 0.3f;
    float height = MainWindow::instance()->height() * 0.65f;
    return QSize( width, height);
}


0 commentaires