2016-03-24 2 views
0

私は親ウィジェット(矩形)を持っており、その中に子ウィジェットを配置したいと思います。子供の位置は設定可能でなければなりません。子ボタンは、ボタンが押されると、親ウィジェットに動的に追加されます。ボタンが押されると、ChildWidgetのインスタンスが作成されます。 PaintEventが呼び出された時点でサイズを更新する方法子ウィジェットのヒント

ChildWidget::ChildWidget(QWidget* pParent) 
{ 
    setParent(pParent) 

    show(); 

    SetChildPosition(); 

} 

/*********** Protected methods ************/ 

void ChildWidget::paintEvent(QPaintEvent* pEvent) 
{ 
    QPainter painter(this); 
    painter.drawRect(0, 0, sizeHint().width() - 1, sizeHint().height() - 1); 
    resize(sizeHint()); 

    QWidget::paintEvent(pEvent); 
} 

/*********** Private methods ************/ 

void ChildWidget::SetChildPosition() 
{ 
    QPoint childPos = QPoint(parentWidget()->width() - sizeHint().width() - 5, 5); 

    move(childPos); 
} 

、のsizehint()が描画された長方形は、ウィジェットのサイズを有する(正確であるが、それはのsizehint()と思われる。幅()= -1「SetChildPositionで私が示唆したように、レイアウトを使用して問題を解決したSetChildPosition 『?

+1

これを処理する正しい方法は、親ウィジェット用にレイアウトを設定し、親ウィジェットにレイアウトに子ウィジェットを追加することです。ウィジェットを適切に配置します。 –

+0

どうしたらうまくいくのですか? childwidgetの位置も設定可能でなければなりません。例えば、ピクセル位置(100,100)に設定することが可能でなければならない。 – Frank

+1

あなたの質問には重要な詳細が見当たらないかもしれませんが、このユースケースがどれほど有効かわかりません。任意のウィジェットでは、子ウィジェットがレイアウトを使用せずにその親に強制的に入ることができないように見えます。子どもが親の重要な部分に自分自身を位置づけたらどうなるでしょうか?親がサイズ変更されたとき、子供はどのように適切に対応するでしょうか?ユーザ定義のウィジェット型のセットについては、子ウィジェットが新しいメンバ関数を介して親に対して所望の位置情報を伝達することが可能である。 –

答えて

0

」機能が。私は呼び出す前のsizehintを更新する方法はあります』。

私はparentWidgetの上にQGridLayoutを置き、子供を置いその中のウィジェット。次に、QGridLayoutの 'setColumnMinimumWidth'と 'setRowMinimumHeight'を使用して、右のピクセル座標で取得しました。

関連する問題