私はWA_DeleteOnClose
必要なものを正確に実装する属性を試しています。同じことを手動で行うよりもはるかにきれいです。ただし、問題があります。親なしで適用される myQMainWindow
を作成WA_DeleteOnClose
すると、閉じるときに削除されません。また、親 (QMainWindow
アプリケーションのメイン) を設定すると、問題のセカンダリQMainWindow
はタスクバー ボタンを失いますが、これは受け入れられません。このジレンマをどのように解決できますか?
1300 次
1 に答える
1
これWA_DeleteOnClose
は、トップレベルのウィジェットで機能するはずです。そうでない場合、それはバグであるか、ネストされたイベント ループを実行するなど、別のことをしている可能性があります。ウィンドウが削除されるかどうかの簡単なテストは次のようになります。
QObject::connect(widget, &QObject::destroyed, [](QObject * obj){
qDebug() << obj << "was destroyed";
});
WA_DeleteOnClose は親なしで適用され、削除されません
WA_DeleteOnClose
親を持つウィジェットによって影響を受ける動作の実装には、コードはありません。ウィジェットが -a である限り、Qt::Window
削除されます。を参照してくださいcloseHelper
。
問題のセカンダリ QMainWindow は、受け入れられないタスクバー ボタンを失います。
これはおそらくQWidget
だけでなく、すべてに当てはまりますQMainWindow
。
確認のために、このテスト ケースは役に立ちませんか? アプリケーションの出力が何を示しているかお知らせください。
#include <QLabel>
#include <QPointer>
#include <QApplication>
int main(int argc, char ** argv) {
QApplication app(argc, argv);
QPointer<QLabel> label = new QLabel("Hello, world");
label->setAttribute(Qt::WA_DeleteOnClose);
label->setAttribute(Qt::WA_QuitOnClose);
label->show();
app.exec();
qDebug() << qVersion() << label; // will be null if label was deleted
return 0;
}
于 2015-07-16T20:10:22.960 に答える