2010-10-26 10 views
2

J'utilise QT Creator pour développer une petite application GUI. J'ai un composant GraphicsView qui couvre toute la fenêtre. Ma question est, comment puis-je placer d'autres widgets (tels que des boutons transparents) sur chacun des quatre coins de l'application. En outre, comment puis-je m'assurer que les composants en bas à droite soient redimensionnés correctement afin qu'ils restent dans le coin inférieur droit.Superposition de composants avec QT

+0

Parlez-vous des boutons comme QGraphicsItems dans la scène ou QWidgets posé sur QGraphicsView? Je suis également incertain sur les boutons redimensionnables, ce n'est pas un comportement de bouton commun donc un peu de contexte pourrait aider :) –

+0

Salut, Les boutons sont des boutons standards QT (bien que d'autres Widgets puissent être comme des éléments de case à cocher). Ils ne sont pas redimensionnables mais je veux que leur position reste dans le coin inférieur droit et ne pas être au centre de l'écran, car je rends la fenêtre plus grande. – Dave

Répondre

1

Ok, vous pouvez ajouter une mise en page et QWidget à un QGraphicsView afin qu'ils superposent la vue ci-dessous. Vous ne pouvez pas le faire avec QtDesigner (et je suppose que QtCreator aussi), vous devrez donc le faire dans le code. Vous pouvez mettre le code suivant dans le constructeur de votre fenêtre contenant le QGraphicsView (vue nommée) et il va ajouter deux boutons à une disposition qui les gardera ancrés en bas à droite de la vue:

QGridLayout *gridLayout; 
QSpacerItem *horizontalSpacer; 
QSpacerItem *verticalSpacer; 
QPushButton *button1; 
QPushButton *button2; 

gridLayout = new QGridLayout(view); 
horizontalSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); 
verticalSpacer = new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding); 
button1 = new QPushButton(view); 
button1->setText("Button1"); 
button2 = new QPushButton(view); 
button2->setText("Button2"); 

gridLayout->addWidget(button1, 1, 1, 1, 1); 
gridLayout->addWidget(button2, 1, 2, 1, 1); 
gridLayout->addItem(horizontalSpacer, 1, 0, 1, 1); 
gridLayout->addItem(verticalSpacer, 0, 2, 1, 1); 

Il shouldn Pas de problème pour ajouter deux autres boutons et deux autres espaceurs pour obtenir un bouton dans chaque coin de la fenêtre.

Rendre les contrôles QWidget standard peut être un peu délicat, en particulier les boutons. Les étiquettes sont faciles cependant. Vous pouvez vous référer à mon answer to another question here pour quelques conseils pour rendre transparent QPushButtons.

+0

Whow! Au moins, c'est la première fois que j'ai pu créer une mise en page en couches avec Qt! Merci! Mais ce n'est guère idéal. Je veux dire ... il doit y avoir un moyen officiel. A quoi servent les fonctions "Send Back" "Send Front" dans QDesigner? : / – ewerybody

0

Ok, j'ai essayé la chose avec PySide maintenant et ce n'est pas si mauvais .. Contrairement à pirater le fichier ui généré, je suggère de le faire après! Donc je suis en train de concevoir 2 cellules dans un QGridLayout et de tout organiser côte à côte. avoir compilé et lors de la construction de l'interface utilisateur I:

# take 2nd item and add it back to 0, 0 cell in the grid layout 
    layer = self.ui.gridLayout.takeAt(1) 
    self.ui.gridLayout.addLayout(layer, 0, 0, 1, 1)