Viadeo Twitter Google Bookmarks ! Facebook Digg del.icio.us MySpace Yahoo MyWeb Blinklist Netvouz Reddit Simpy StumbleUpon Bookmarks Windows Live Favorites 
Logo Documentation Qt ·  Page d'accueil  ·  Toutes les classes  ·  Toutes les fonctions  ·  Vues d'ensemble  · 

QGraphicsProxyWidget

La classe QGraphicsProxyWidget fournit une surcouche pour l'intégration d'un QWidget dans une QGraphicsScene. Plus d'informations...

Héritage

Hérite de QGraphicsWidget.

La classe a été introduite dans Qt 4.4.

Description détaillée

La classe QGraphicsProxyWidget fournit une surcouche pour l'intégration d'un QWidget dans une QGraphicsScene.

QGraphicsProxyWidget embarque les widgets basés sur QWidget, par exemple, les QPushButton, les QFontComboBox ou même les QFileDialog, dans une QGraphicsScene. La classe transfère les événements entre les deux objets et convertit les géométries entières des QWidget en géométries basées sur les qreal des QGraphicsWidget. QGraphicsProxyWidget supporte toutes les fonctionnalités importantes de QWidget, incluant le focus par tabulation, les entrées au clavier, les glissements et les popups. Vous pouvez aussi embarquer des widgets complexes, par exemple, les widgets possédant des sous-widgets.

Exemple :

 int main(int argc, char **argv)
 {
     QApplication app(argc, argv);
 
     QTabWidget *tabWidget = new QTabWidget;
 
     QGraphicsScene scene;
     QGraphicsProxyWidget *proxy = scene.addWidget(tabWidget);
 
     QGraphicsView view(&scene);
     view.show();
 
     return app.exec();
 }

QGraphicsProxyWidget intègre automatiquement les popups enfants des widgets intégrés en créant un proxy enfant pour chaque popup. Cela signifie que lorsqu'une QComboBox intégrée affiche sa liste en popup, un nouveau QGraphicsProxyWidget est automatiquement créé, intégrant le popup et le positionnant correctement. Cela fonctionne seulement si le popup est un enfant du widget intégré (par exemple QToolButton::setMenu() requiert l'instance du QMenu d'être un enfant du QToolButton).

Embarquer un widget avec QGraphicsProxyWidget

Il y a deux méthodes pour embarquer un widget avec QGraphicsProxyWidget. La façon la plus courante est de passer le pointeur du widget à QGraphicsScene::addWidget() avec les Qt::WindowFlags pertinants. Cette fonction retourne un pointeur sur un QGraphicsProxyWidget. Vous pouvez alors choisir de changer de parent ou de positionner le proxy ou le widget embarqué.

Par exemple, dans le code ci-dessous, nous intégrons une QGroupBox dans le proxy :

 QGroupBox *groupBox = new QGroupBox("Détails du contact");
 QLabel *numberLabel = new QLabel("Numéro de téléphone");
 QLineEdit *numberEdit = new QLineEdit;
 
 QFormLayout *layout = new QFormLayout;
 layout->addRow(numberLabel, numberEdit);
 groupBox->setLayout(layout);
 
 QGraphicsScene scene;
 QGraphicsProxyWidget *proxy = scene.addWidget(groupBox);
 
 QGraphicsView view(&scene);
 view.show();

L'image ci-dessous présente le résultat obtenu avec son contenu décalé et le rectangle de contenu annoté.

image

Ou bien, vous pouvez commencer par créer un nouvel élément QGraphicsProxyWidget et appeler alors setWidget() pour embarquer un QWidget. La fonction widget() retourne un pointeur sur le widget embarqué. Le QGraphicsProxyWidget partage la propriété avec QWidget, donc si l'un des deux widgets est détruit, le second widget va être automatiquement détruit.

Synchroniser les états des Widgets

QGraphicsProxyWidget garde ses états synchronisés avec le widget intégré. Par exemple, si le proxy est caché ou désactivé, le widget embarqué va aussi être caché ou désactivé et vice versa. Lorsque le widget est embarqué après l'appel à addWidget(), QGraphicsProxyWidget copie l'état du widget dans le proxy et par la suite les deux vont rester synchronisés lorsque c'est possible. Par défaut, lorsque vous embarquez un widget dans un proxy, le widget et le proxy vont être visibles car un QGraphicsWidget est visible lorsqu'il est créé (vous n'avez pas à appeler show()). Si vous cachez explicitement le widget embarqué, le proxy va aussi devenir invisible.

Exemple:

 QGraphicsScene scene;
 
 QLineEdit *edit = new QLineEdit;
 QGraphicsProxyWidget *proxy = scene.addWidget(edit);
 
 edit->isVisible();  // retourne vrai
 proxy->isVisible(); // retourne également vrai
 
 edit->hide();
 
 edit->isVisible();  // retourne faux
 proxy->isVisible(); // retourne également faux

QGraphicsProxyWidget garde une correspondance pour les états suivants :

État QWidget État QGraphicsProxyWidget Notes
QWidget::enabled QGraphicsProxyWidget::enabled
QWidget::visible QGraphicsProxyWidget::visible L'état explicite est aussi symétrique.
QWidget::geometry QGraphicsProxyWidget::geometry La géométrie est garantie symétrique tant que le widget est visible.
QWidget::layoutDirection QGraphicsProxyWidget::layoutDirection
QWidget::style QGraphicsProxyWidget::style
QWidget::palette QGraphicsProxyWidget::palette
QWidget::font QGraphicsProxyWidget::font
QWidget::cursor QGraphicsProxyWidget::cursor Le widget embarqué surcharge le curseur du widget du proxy. Le curseur du proxy change selon le sous-widget embarqué qui se trouve actuellement sous la souris.
QWidget::sizeHint() QGraphicsProxyWidget::sizeHint() Toutes les fonctionnalités des tailles préférées des widgets embarqués sont transférées par le proxy.
QWidget::getContentsMargins() QGraphicsProxyWidget::getContentsMargins() Mis à jour seulement une fois par setWidget().
QWidget::windowTitle QGraphicsProxyWidget::windowTitle Mis à jour seulement une fois par setWidget().

Note : QGraphicsScene garde le widget embarqué dans un état spécial qui l'empêche d'être dérangé par les autres widgets (qu'ils soient embarqués ou non) tant que le widget est embarqué. Dans cet état, le widget peut avoir un comportement légèrement différent lorsqu'il n'est pas embarqué.

Attention : cette classe est fournie par commodité lors de la connexion de QWidgets et de QGraphicsItems, elle ne devrait pas être utilisée pour des scénarios demandant de hautes performances.

Voir aussi QGraphicsScene::addWidget() et QGraphicsWidget.

Fonctions membres

QGraphicsProxyWidget::QGraphicsProxyWidget ( QGraphicsItem * parent = 0, Qt::WindowFlags wFlags = 0 )

Construit un nouveau widget QGraphicsProxy. Le parent parent et wFlags sont passés au constructeur de QGraphicsItem.

QGraphicsProxyWidget::~QGraphicsProxyWidget ()

Détruit le widget proxy et n'importe quel widget embarqué.

void QGraphicsProxyWidget::contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ) [virtual protected]

Réimplémentation de QGraphicsItem::contextMenuEvent().

QGraphicsProxyWidget * QGraphicsProxyWidget::createProxyForChildWidget ( QWidget * child )

Crée un widget proxy pour l'enfant child donné appartenant au widget contenu dans ce proxy.

Cette fonction permet d'acquérir des proxys pour les widgets de bas niveau. Par exemple, vous pouvez embarquer une boite de dialogue et transformer un seul de ses widgets.

Si le widget est déjà embarqué, la fonction retourne le widget proxy déjà existant.

Cette fonction a été introduite dans Qt 4.5.

Voir aussi newProxyWidget() et QGraphicsScene::addWidget().

void QGraphicsProxyWidget::dragEnterEvent ( QGraphicsSceneDragDropEvent * event ) [virtual protected]

Réimplementation de QGraphicsItem::dragEnterEvent().

void QGraphicsProxyWidget::dragLeaveEvent ( QGraphicsSceneDragDropEvent * event ) [virtual protected]

Réimplementation de QGraphicsItem::dragLeaveEvent().

void QGraphicsProxyWidget::dragMoveEvent ( QGraphicsSceneDragDropEvent * event ) [virtual protected]

Réimplementation de QGraphicsItem::dragMoveEvent().

void QGraphicsProxyWidget::dropEvent ( QGraphicsSceneDragDropEvent * event ) [virtual protected]

Réimplementation de QGraphicsItem::dropEvent().

bool QGraphicsProxyWidget::event ( QEvent * event ) [virtual protected]

Réimplementation de QObject::event().

bool QGraphicsProxyWidget::eventFilter ( QObject * object, QEvent * event ) [virtual protected]

Réimplementation de QObject::eventFilter().

void QGraphicsProxyWidget::focusInEvent ( QFocusEvent * event ) [virtual protected]

Réimplementation de QGraphicsItem::focusInEvent().

bool QGraphicsProxyWidget::focusNextPrevChild ( bool next ) [virtual protected]

Réimplementation de QGraphicsWidget::focusNextPrevChild().

void QGraphicsProxyWidget::focusOutEvent ( QFocusEvent * event ) [virtual protected]

Réimplementation de QGraphicsItem::focusOutEvent().

void QGraphicsProxyWidget::grabMouseEvent ( QEvent * event ) [virtual protected]

Réimplementation de QGraphicsWidget::grabMouseEvent().

void QGraphicsProxyWidget::hideEvent ( QHideEvent * event ) [virtual protected]

Réimplementation de QGraphicsWidget::hideEvent().

void QGraphicsProxyWidget::hoverEnterEvent ( QGraphicsSceneHoverEvent * event ) [virtual protected]

Réimplementation de QGraphicsItem::hoverEnterEvent().

void QGraphicsProxyWidget::hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ) [virtual protected]

Réimplementation de QGraphicsItem::hoverLeaveEvent().

void QGraphicsProxyWidget::hoverMoveEvent ( QGraphicsSceneHoverEvent * event ) [virtual protected]

Réimplementation de QGraphicsItem::hoverMoveEvent().

QVariant QGraphicsProxyWidget::itemChange ( GraphicsItemChange change, const QVariant & value ) [virtual protected]

Réimplementation de QGraphicsItem::itemChange().

void QGraphicsProxyWidget::keyPressEvent ( QKeyEvent * event ) [virtual protected]

Réimplementation de QGraphicsItem::keyPressEvent().

void QGraphicsProxyWidget::keyReleaseEvent ( QKeyEvent * event ) [virtual protected]

Réimplementation de QGraphicsItem::keyReleaseEvent().

void QGraphicsProxyWidget::mouseDoubleClickEvent ( QGraphicsSceneMouseEvent * event ) [virtual protected]

Réimplementation de QGraphicsItem::mouseDoubleClickEvent().

void QGraphicsProxyWidget::mouseMoveEvent ( QGraphicsSceneMouseEvent * event ) [virtual protected]

Réimplementation de QGraphicsItem::mouseMoveEvent().

void QGraphicsProxyWidget::mousePressEvent ( QGraphicsSceneMouseEvent * event ) [virtual protected]

Réimplementation de QGraphicsItem::mousePressEvent().

void QGraphicsProxyWidget::mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ) [virtual protected]

Réimplementation de QGraphicsItem::mouseReleaseEvent().

QGraphicsProxyWidget * QGraphicsProxyWidget::newProxyWidget ( const QWidget * child ) [protected slot]

Crée un widget proxy pour l'enfant child donné appartenant au widget contenu dans ce proxy.

Vous ne devriez pas appeler cette fonction directement ; utilisez QGraphicsProxyWidget::createProxyForChildWidget() à la place.

Cette fonction est un faux slot virtuel que vous pouvez réimplémenter dans votre sous-classe dans le but de contrôler la façon dont les nouveaux widgets proxys sont créés. L'implémentation par défaut retourne un proxy créé avec le constructeur QGraphicsProxyWidget() en utilisant ce widget proxy comme parent.

Cette fonction a été introduite dans Qt 4.5.

Voir aussi createProxyForChildWidget().

void QGraphicsProxyWidget::paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget ) [virtual]

Réimplementation de QGraphicsItem::paint().

void QGraphicsProxyWidget::resizeEvent ( QGraphicsSceneResizeEvent * event ) [virtual protected]

Réimplementation de QGraphicsWidget::resizeEvent().

void QGraphicsProxyWidget::setGeometry ( const QRectF & rect ) [virtual]

Réimplementation de QGraphicsLayoutItem::setGeometry().

void QGraphicsProxyWidget::setWidget ( QWidget * widget )

Embarque le widget dans le widget proxy. Le widget intégré doit vivre exclusivement dans ou en dehors de la Vue Graphique. Vous ne pouvez embarquer un widget tant que celui-ci est visible autre part dans l'interface utilisateur.

Le widget doit être un widget de haut niveau ayant un parent à 0.

Lorsque le widget est embarqué, ses états (par exemple : la visibilité, l'activité, la géométrie, les tailles préférées) sont copiés dans le widget proxy. Si le widget embarqué est explicitement caché ou désactivé, le widget proxy va devenir explicitement caché ou désactivé après que l'intégration soit complète. La documentation de la classe décrit entièrement le partage des états.

Les drapeaux de fenêtre de QGraphicsProxyWidget déterminent si le widget, après l'intégration, va recevoir les décorations des fenêtres ou pas.

Après que cette fonction retourne, QGraphicsProxyWidget va garder ses états synchronisés avec ceux du widget lorsque cela est possible.

Si un widget est déjà intégré par ce proxy lors de l'appel à cette fonction, ce widget va être automatiquement désintégré. Passer 0 comme argument widget va désintégrer le widget et la propriété du widget intégré va être transférée à l'appelant. Tous les widgets enfants qui sont embarqués vont aussi être embarqués et leur widget proxy détruit.

Notez que les widgets avec l'attribut Qt::WA_PaintOnScreen ou les widgets qui interfacent une application externe ainsi que les contrôleurs ne peuvent pas être embarqués. Les exemples sont QGLWidget et QAxWidget.

Voir aussi widget().

void QGraphicsProxyWidget::showEvent ( QShowEvent * event ) [virtual protected]

Réimplémentation de QGraphicsWidget::showEvent().

QSizeF QGraphicsProxyWidget::sizeHint ( Qt::SizeHint which, const QSizeF & constraint = QSizeF() ) const [virtual protected]

Réimplémentation de QGraphicsLayoutItem::sizeHint().

QRectF QGraphicsProxyWidget::subWidgetRect ( const QWidget * widget ) const

Retourne le rectangle du widget, qui doit être, lui-même, un descendant de widget() ou widget(), dans l'espace de coordonnées de ce proxy.

Si aucun widget n'est embarqué, widget est 0 ou si widget n'est pas un descendant du widget embarqué, la fonction retourne un rectangle QRectF vide.

Voir aussi widget().

int QGraphicsProxyWidget::type () const [virtual]

Réimplémentation de QGraphicsItem::type().

void QGraphicsProxyWidget::ungrabMouseEvent ( QEvent * event ) [virtual protected]

Réimplémentation de QGraphicsWidget::ungrabMouseEvent().

void QGraphicsProxyWidget::wheelEvent ( QGraphicsSceneWheelEvent * event ) [virtual protected]

Réimplémentation de QGraphicsItem::wheelEvent().

QWidget * QGraphicsProxyWidget::widget () const

Retourne un pointeur sur le widget embarqué.

Voir aussi setWidget().

Remerciements

Merci à Alexandre Laurent pour la traduction ainsi qu'à Jonathan Courtois et Claude Leloup pour leur relecture !

Publicité

Best Of

Actualités les plus lues

Semaine
Mois
Année
  1. « Quelque chose ne va vraiment pas avec les développeurs "modernes" », un développeur à "l'ancienne" critique la multiplication des bibliothèques 88
  2. Apercevoir la troisième dimension ou l'utilisation multithreadée d'OpenGL dans Qt, un article des Qt Quarterly traduit par Guillaume Belz 0
  3. Les développeurs ignorent-ils trop les failles découvertes dans leur code ? Prenez-vous en compte les remarques des autres ? 17
  4. Pourquoi les programmeurs sont-ils moins payés que les gestionnaires de programmes ? Manquent-ils de pouvoir de négociation ? 31
  5. BlackBerry 10 : premières images du prochain OS de RIM qui devrait intégrer des widgets et des tuiles inspirées de Windows Phone 0
  6. Quelles nouveautés de C++11 Visual C++ doit-il rapidement intégrer ? Donnez-nous votre avis 10
  7. Adieu qmake, bienvenue qbs : Qt Building Suite, un outil déclaratif et extensible pour la compilation de projets Qt 17
Page suivante

Le Qt Developer Network au hasard

Logo

Applications mobiles modernes avec Qt et QML

Le Qt Developer Network est un réseau de développeurs Qt anglophone, où ils peuvent partager leur expérience sur le framework. Lire l'article.

Communauté

Ressources

Liens utiles

Contact

  • Vous souhaitez rejoindre la rédaction ou proposer un tutoriel, une traduction, une question... ? Postez dans le forum Contribuez ou contactez-nous par MP ou par email (voir en bas de page).

Qt dans le magazine

Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia. Qt 4.7
Copyright © 2012 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.
Vous avez déniché une erreur ? Un bug ? Une redirection cassée ? Ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter ou par MP !
 
 
 
 
Partenaires

Hébergement Web