質問

私のアプリによっては、splittedによるQSplitter、削除する必要もあり、パーツをプレゼント!

する方法を教えてください。において有用な方法

役に立ちましたか?

解決

はQtの多くのものは、「伝統的に」削除することはできません。その代わりに非表示()を呼び出し、それを破壊。 QSplitter のドキュメントから:

  

あなたが非表示()子そのスペース意志   他の間で分配すること   子供達。それは時に復活します   あなたはそれが再び)(表示されます。

他のヒント

では明らかでなくしたい場合は保存のウィジェットに入れてどこか他の、あなたまたは破壊するパーツをプレゼント!

  • 破壊のウィジェット できれば 取得ポインタをウィジェットできる 単に削除します。スプリッターま 安全に通知されることを子どもが 削除されています取り外す からそのものです。

  • 保存のウィジェット ばすむ のポインタをウィジェットできる をセットするだけで、その親その他の ウィジェットを追加で別の ウィジェットのレイアウトで表示 あります。これは安全面では、 QSplitter通知する その子どもがreparented.

を設定したい場合は、親をNULL(cjhuittの回答のため十分注意することに対する責任の清掃するメモリのためのウィジェットがいなくなります。

私はTuminoidの答えが好きです。しかし、あなたは絶対にそれを取り除く必要がある場合は、削除したいウィジェットを取得し、そのウィジェット上setParent( NULL )を呼び出してみてください。それは私の最高の推測だ。

あなたがウィジェットへのポインタを保持する場合は、単にそれを削除するか、安全側になりたい場合はdeleteLater()を使用します。

あなたはQSplitter ::ウィジェット(int型のインデックス)機能を使用し、ウィジェットのポインタを持っていない場合。その後、あなたはそのdeleteLater()スロットを呼び出して使用することができます。

)あなたがウィジェットのインデックスを持っていないが、あなたはまだウィジェットのobjectNameを(知っている場合は、はQObject :: findChild()ウィジェットのポインタを得るためにあなたの唯一の方法です。

私は同じ問題に遭遇しました。 Qtの4.8で一時的に、私は単にそれを隠すQSplitterのウィジェットの1を非表示にします。スプリッタハンドルがまだ移動する利用可能であるしかしそれは、十分ではありません。しかし、ハンドルは、同様にアクセスして非表示にすることができます:

frameA->setVisible(conditionA);
frameB->setVisible(conditionB);
if ( !(conditionA && conditionB) ) // if only 1 frame is visible
{
   splitter->handle(0)->setVisible(false);
}

削除されたばかりの子ウィジェットを防止するためのもう1つの簡単な方法はQSplitter.takeWidget(子)を使用することです。また、これは、スプリッタからウィジェットを削除するお勧めの方法です。 (Qtのドキュメント)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top