Girish spaketh:

> boundingRect() works as I would expect. Can you provide some sample code?
> <snip, example extracting good coordinates from
> QDeclarativeItem::boundingRect()>
>

Was your C++ code inside an  application-derived
QDeclarativeItem::itemChange()?

I'm Qt4.7.0, Win7-64bit, MSVC++2008.

I tried it again to make sure there was no difference between my
"dynamic_cast<>()" and your "qobject_cast<>()", and they behave the same.
(I suppose I should be doing qobject_cast<> anyway).

My code subset:

-------------------------
//FILE: MyQml.qml
import Qt 4.7
import MyPluginLayout 1.0

Rectangle {
  MyPluginLayout {
    id: myPluginLayout
  }
  Text {
    text: "hello"
    parent: myPluginLayout
    width: 40
    height: 30
  }
}

-------------------------
//FILE: MyPluginLayout.cpp
class MyPluginLayout : public SdqDeclarativeItem
{
  ...Q_OBJECT, Q_PROPERTY, ...
  public:
    virtual QVariant itemChange(
      QGraphicsItem::GraphicsItemChange change,
      const QVariant& value)
    {
      if(change == QGraphcisItem::ItemChildAddedChange)
      {
        QGraphicsItem* graphics_item = value.value<QGraphicsItem*>();
        ASSERT(graphics_item);
        //DEBUGGER SHOWS VTABLE FOR "graphics_item" TO BE A QDeclarativeText

        QRectF bounding_rect;

        bounding_rect = graphics_item->boundingRect(); // (0,0,-1,-1)
        bounding_rect =
qobject_cast<QGraphicsObject*>(graphics_item)->boundingRect(); //
(0,0,-1,-1)
        bounding_rect =
qobject_cast<QDeclarativeItem*>(graphics_item)->boundingRect(); //
(0,0,-1,-1)

        double value;

        value =
qobject_cast<QObject*>(graphics_item)->property("width").toReal(); // 40
        value =
qobject_cast<QObject*>(graphics_item)->property("height").toReal(); // 30

        value =
dynamic_cast<QObject*>(graphics_item)->property("width").toReal(); // 40
        value =
dynamic_cast<QObject*>(graphics_item)->property("height").toReal(); // 30

        //...do layout stuff to place item added...
       }
};
-----------------------

On the bright side, all of the boundingRect() calls agree.  They just don't
have the width/height property values.  So, I'm using "QObject::property()",
which seems to always work.

--charley
_______________________________________________
Qt-qml mailing list
Qt-qml@trolltech.com
http://lists.trolltech.com/mailman/listinfo/qt-qml

Reply via email to