私はQtの新機能です。ウィジェットの削除方法は非常に混乱しています。私はビデオを読んでいて、ビデオフレームが読み込まれている間にQProgressbarを表示しておき、ビデオがロードされたらこのQProgressbarを削除したかったのです。ウィジェットへのポインタの削除Qt C++
私は2種類の方法でそれを行っている:
を、このコードは、クラス内に記述されており、私は、このクラスのデストラクタが呼び出されたときに想定したポインタ
QWidget* wd = new QWidget(); QProgressBar* pB = new QProgressBar(wd); QLabel* label = new QLabel(wd); //setting geometry and updating the label and progressbar wd->deleteLater(); wd->hide();
を使用してウィジェットはすべての子供で削除されますが、それは起こらなかったので、この関数を再度実行するたびに、新しいウィジェットが作成され、前のウィジェットを隠したり削除したりせずに作成されます(注:ウィジェットからラベルとプログレスバーを削除しようとしました彼らは内部から消えるだろう電子ウィジェットが、これは実現しなかった「(PB)を削除;」)
使用したオブジェクト私は同じコードを実行したが、代わりにポインタのオブジェクトを使用して、それが持っている
QWidget wd; QProgressBar pB(&wd); QLabel label(wd); //setting geometry and updating the label and progressbar wd.deleteLater(); wd.hide();
私が望んでいたとおりに正確に実行し、関数を実行するたびに古いウィジェットが破棄され、新しいウィジェットが作成されます。
注:ポインタの場合は、メインウィンドウを閉じると、ウィジェットはまだ存在し、プログラムを終了するまで手動で終了しません。 - オブジェクトの場合、メインウィンドウを閉じるとすべてが閉じられ、プログラムは正しく終了します。
私はこの出来事があると私は典型的なCで任意のメモリリーク
私はメモリ管理がC++でどのように機能するかについては、[ブック](http://stackoverflow.com/a/388282/3484570)を読んでお勧めします。それから[Qtがどう違うのか](http://doc.qt.io/qt-5/objecttrees.html)を読んでください。 – nwp
'QProgressBar'を削除する代わりに、単純に非表示にすることができます。あなたは次のストリームのためにとにかくそれを必要とすることができます。 – maxik