2016-05-08 11 views
0

ポインタでレイアウトの内容を変更することはできますか?Qtのポインタでレイアウト内容を変更

私は以下のようにしたいと思います。ヘッダで

:私はコンストラクタでウィジェットを設定するソースファイル内

QWidget* activeView; 
QWidget* one; 
QWidget* two; 
... 

、レイアウト第1プッシュ:

スロットまたは方法Iと
activeView = one; 
ui->activeLayout->addWidget(activeView); 

以降activeView

activeView = two; 

私はこれを試しましたが、動作しません。私はレイアウトの方法をupdate()と呼んでいました。

答えて

3

これは残念なことに動作しません。

希望するものはQStackedWidgetです。公式文書はhereです。

このウィジェットを使用したくない場合は、手動で行う必要がある場合は、コードで自分でレイアウトを再構築する必要があります。それはメソッドでラップすることができ、あまりにも醜いことはありません。

例:

void clearLayout(QLayout *layout) 
{ 
    if (layout) { 
     while(layout->count() > 0){ 
      QLayoutItem *item = layout->takeAt(0); 
      delete item->widget(); 
      delete item; 
     } 
    } 
} 

void setNewWidgetVisible(QWidget *activeView) 
{ 
    clearLayout(ui->activeLayout); 
    ui->activeLayout->addWidget(activeView); 
} 
+0

しかし、なぜこの作品だろうか?ウィジェットの内容が特定の方法でコピーまたは処理されている可能性があると思ったのですが、update()メソッドで明示的に指示されたときにそれを再構築する必要があると思います。私はこれが私には合理的だと思います。私は何かを逃していることを知っている。 – godzsa

+1

C++では、ポインタは単にメモリ位置のアドレスを格納します。関数へのポインターを渡すと、その関数に位置情報がコピーされるため、ポインタ変数を他の場所を指すように変更しても、関数に送信したメモリーの場所には影響しません。 –

+0

ああ、確かに、私は何かが逃したことを知っていた:Dありがとう – godzsa

関連する問題