2011-11-25 28 views
7

私はQML extensionプラグインを作成していますが、私が実装したばかりの要素のサイズにアクセスする方法を探しています。anchors.fillで定義されたQML要素のサイズを読む:parent

今(CustomElementという名前の)新しい要素は、ユーザーがQMLにユーザーファイルので、それは、高さ値だ定義することで、したい任意のサイズで作成することができます行うことができます。

CustomElement 
{ 
    id: my_elem 
    width: 800 
    height: 600 
} 

しかし、私はこのように、ユーザーがanchorてサイズを設定する際にサイズ情報を取得できるようにしたいと思い

Rectangle 
{ 
    width: 800 
    height: 600 

    CustomElement 
    { 
     id: my_elem 
     anchors.fill: parent 
    } 
} 

anchorsの情報にアクセスする方法はありません。

プラグインクラスは次のように定義される:プラグインのコンストラクタで

class CustomElement: public QDeclarativeItem 
{ 
    Q_OBJECT 
    //Q_PROPERTY() stuff 
public: 
    // ... 
}; 

、私はfalseにQGraphicsItem::ItemHasNoContentsを設定します。

CustomElement::CustomElement(QDeclarativeItem* parent) 
: QDeclarativeItem(parent) 
{ 
    qDebug() << "CustomElement::CustomElement parent is:" << parent; 

    setFlag(QGraphicsItem::ItemHasNoContents, false); 
} 

デバッグを追加した後、私はparentがあることに気づいた0これはなぜ有用な情報をboundingRect()などの方法で取得できないのかを説明しています。どうやら、問題は私のプラグインに親がないことです。この問題をどうやって解決するのですか?

答えて

5

解決済み

読書When is the parent set?私は私がする必要があったものを見つけるのを助けました。このプラグインは、ある時点で画面上に描画されることを意味するグラフィカルコンポーネント(つまり、ビジュアルインターフェイスを備えています)です。 Qtがコンポーネントのロードを終了すると、componentComplete()というメソッドが呼び出されて通知されます。

virtual void componentComplete(); 

と、それを実装します:

私がしなければならなかったすべては、パブリックメソッドとしての私のクラス定義に、このメソッドを追加したスーパークラスのメソッドを呼び出す

void CustomElement::componentComplete() 
{ 
    Q_D(CustomElement);  

    // Call superclass method to set CustomElement() parent 
    QDeclarativeItem::componentComplete(); 
} 

設定のようです私のプラグインの親です。これにより、anchors.fill: parentで設定された情報にアクセスできます。その後

私はこの情報を取得しなければならなかったすべてだった:

Q_Q(Video); 
qDebug() << "CustomElement::play: widget size is " << q->width() << "x" << q->height(); 
+2

あなたはわずか3日間の検索に終止符を打ちます!私は十倍upvoteすることができます – Martin

+0

うーん、それはまだ私のために動作しません。 Q_DとQ_Qとは何ですか?クラス名でQ_Dを呼び出すと、コンパイラエラーが発生します。あなたは完全な例を投稿できますか? – Martin

+0

http://www.qtcentre.org/threads/20953-Q_D-and-Q_Q – karlphillip

関連する問題