2016-04-11 17 views
1

私はという親ウィジェットを含むレイアウトを作成しました。その親ウィジェットで別のウィジェットを作成しました。親ウィジェット(親ウィジェットがレイアウトに追加されました)の中央の子ウィジェット

私のコードは、これと同様である:私は親ウィジェットに子ウィジェットをセンタリングするにはどうすればよい

QGridLayout *layout = new QGridLayout(); 
QWidget *parentWidget = new QWidget(); 
layout->addWidget(parentWidget); 
QWidget *childWidget = new QWidget(parentWidget); 

enter image description here

問題があるのは、レイアウト内にあるため親ウィジェットの実際のサイズを取得できないことです。

答えて

2

子を親のshoweEventの中に移動します。 boolフラグを使用すると、親が最初に表示されたときにのみフラグを設定できます。

void Parent::showEvent(QShowEvent *) 
{ 
    if(_first_show) 
    { 
     _first_show = false; 
     _child->move(this->rect().center() - _child->rect().center()); 
    } 
} 

それが動作することを証明(赤が親で、青が子供である):

enter image description here

+0

私に辛抱強く感謝してくれてありがとう。別のことを聞かせてもらえますか?私はこのメソッドに従う場合、私は右の親ウィジェットのクラスを作成する必要がありますか? – user2652023

+1

@ user2652023これは理想的ですが、そうする必要はありません。 [イベントフィルタ](http://doc.qt.io/qt-5/eventsandfilters.html#event-filters)を使用することもできますが、醜いコードにつながります。 – thuga

2

これは、子ウィジェットの固定サイズを設定し、親ウィジェットのグリッドレイアウト内に配置することで可能です。

QGridLayout *layout = new QGridLayout(); 
QWidget *parentWidget = new QWidget(); 
layout->addWidget(parentWidget); 
QWidget *childWidget = new QWidget(parentWidget); 
QGridLayout *parentLayout = new QGridLayout(); 
parentWidget->setLayout(parentLayout); 
parentLayout->addWidget(childWidget); 
childWidget->setFixedSize(/*some fixed size for child widget*/); 
+0

私はsetFixedSize(と中央に子ウィジェットを移動することができますどのように)?ありがとう – user2652023

+0

@ user2652023、グリッドレイアウトは、セルの中央にウィジェットを配置しますが、固定サイズを設定しない場合、子ウィジェットは親と同じサイズになります(余白を差し引いた) –

+0

これは私の目的です。子ウィジェットより大きいウィジェット、上記の私のコードはちょうど私の考えを説明するために使用されています。イメージは私が望む実際のインターフェースです – user2652023

関連する問題