私はQGraphicsItem
(実際には)を持っており、それが追加された(これも実際には派生クラス)QDeclarativeItem
の可視スペース全体を占めるようにしたいです。通常は、ビューに合わせてルートオブジェクトを使用でき、自動的にサイズ変更されます。QGraphicsView
QDeclarativeView
QDeclarativeView::setResizeMode(QDeclarativeView::SizeRootObjectToView)
QDeclarativeView
私が抱えている問題は、を使用してルートウィジェットを手動で作成していることです
QDeclarativeComponent component(declarativeView->engine(), QUrl(qml));
QDeclarativeItem* object = qobject_cast<QDeclarativeItem*>(component.create());
if (object)
{
declarativeView->scene()->addItem(object);
...
QDeclarativeView
を呼び出すことによって自動的にそれを行わせる代わりにsetSource()
。これを行う理由は、特定のイベントが発生したときにQMLシーンを交換したいが、前のシーンを破棄したくないためです。呼び出すと、が呼び出されるsetSource()
前に追加されたすべてのアイテムが削除されます。setSource()
そのため、代わりに自分で「ルートオブジェクト」を作成し、それを手動でシーンに追加しています。
私は次のように、ウィンドウのresizeEventを使用してサイズを変更していますQDeclarativeItem
。
void AppWindow::resizeEvent (QResizeEvent* event)
{
QDeclarativeItem* object = sceneCache.value(sceneName, 0);
if (object)
{
object->setWidth(declarativeView->viewport()->width());
object->setHeight(declarativeView->viewport()->height());
}
}
これは機能します!しかし、それはあまりきれいではありません。ウィンドウのQDeclarativeItem
サイズをすばやく変更すると、のサイズが十分に速くならず、追いついてサイズを変更する前に、灰色の背景が一時的に表示されます。また、あまりスムーズではありません。
これは、サイズ変更されている複雑なアイテム(私の場合はQWebKitウィジェット)がある場合にのみ発生します。単純なアイテムには問題なく機能します。ただし、それをQDeclarativeView
やらせても、これらの問題はどちらも発生しません。サイズが正しくスムーズに変更されます。
これはQtDeclarativeのものに固有のものではなく、QGraphicsViewに固有のものだと思いますが、おそらく私はそこで間違っています。
誰かアイデアはありますか?