J'ai un QGraphicsItem
(en fait, un QDeclarativeItem
) et je veux qu'il occupe tout l'espace visible du QGraphicsView
(encore une fois, c'est en fait le classe QDeclarativeView
dérivée) à laquelle il a été ajouté. Normalement, vous pouvez utiliser QDeclarativeView::setResizeMode(QDeclarativeView::SizeRootObjectToView)
et QDeclarativeView
redimensionnera automatiquement l'objet racine pour qu'il corresponde à la vue.Redimensionnement d'un QGraphicsItem pour prendre tout l'espace dans un QGraphicsView, problèmes lorsque la fenêtre est redimensionnée
Le problème que je vais avoir est que je suis en train de créer manuellement le widget racine à l'aide
QDeclarativeComponent component(declarativeView->engine(), QUrl(qml));
QDeclarativeItem* object = qobject_cast<QDeclarativeItem*>(component.create());
if (object)
{
declarativeView->scene()->addItem(object);
...
au lieu de laisser QDeclarativeView
le faire automatiquement en appelant setSource()
. La raison pour laquelle je fais cela est parce que je veux échanger la scène QML lorsque certains événements se produisent, mais je ne veux pas détruire la scène précédente. L'appel setSource()
supprime tous les éléments qui ont été ajoutés avant l'appel de setSource()
. Donc, je crée moi-même l '"objet racine" et je l'ajoute manuellement à la scène.
J'utilise les fenêtres resizeEvent pour redimensionner mon QDeclarativeItem
, comme ceci:
void AppWindow::resizeEvent (QResizeEvent* event)
{
QDeclarativeItem* object = sceneCache.value(sceneName, 0);
if (object)
{
object->setWidth(declarativeView->viewport()->width());
object->setHeight(declarativeView->viewport()->height());
}
}
Cela ne fonctionne! Mais, ce n'est pas très joli. Si vous redimensionnez rapidement la fenêtre, le QDeclarativeItem
n'est pas redimensionné assez rapidement et vous voyez brièvement un arrière-plan gris avant de le rattraper et de le redimensionner. C'est aussi pas très lisse. Cela ne se produit que si un élément complexe est redimensionné (dans mon cas, il s'agit d'un widget QWebKit). Cela fonctionne bien pour les éléments plus simples. La chose est, cependant, que si je laisse QDeclarativeView
le faire, je n'ai aucun de ces problèmes: son redimensionnement correctement et en douceur. J'imagine que ce n'est pas spécifique au QtDeclarative, mais plutôt QGraphicsView, même si je me trompe peut-être là-bas.
Quelqu'un a-t-il des idées?
Merci pour cela, il semble que j'ai raté cette fonction. – Dan
Cela a fonctionné, bien que je ne sais pas pourquoi le contenu est centré dans la vue montrant une partie minimale de la couleur d'arrière-plan (blanc) semblable à une bordure blanche. Des indices? – emanuelcds