QMessageBox
たとえば、次のコードで、の親を設定することの利点が何であるかを理解できません。
void mainWindow::showMessage(QString msg) {
QMesageBox::information(this, "title", msg); //'this' is parent
}
誰かが私を助けることができますか?
QMessageBox
たとえば、次のコードで、の親を設定することの利点が何であるかを理解できません。
void mainWindow::showMessage(QString msg) {
QMesageBox::information(this, "title", msg); //'this' is parent
}
誰かが私を助けることができますか?
おそらくいくつかのこと。まず、QMessageBox
から継承しQDialog
ます。QDialog
親の概念があるのでQMessageBox
、一貫性のためにもすべきです。
具体的には、ドキュメントには次のように書かれています。
親はQDialogコンストラクターに渡されます。
少なくとも、新しいダイアログは親の上部の中央に表示されることがよくあります。
しかし、もっとあります!
ドキュメントによると、実際に機能に影響を与える可能性があります。例えば:
Mac OS Xで、メッセージボックスをその親のQt :: Sheetとして表示する場合は、メッセージボックスのウィンドウモダリティをQt :: WindowModalに設定するか、open()を使用します。それ以外の場合、メッセージボックスは標準のダイアログになります。
また、「ウィンドウモダリティ」と「アプリケーションモダリティ」の両方の概念があり、前者は親ウィンドウへの入力のみを防止し、後者はアプリケーション全体への入力を防止します。これには明らかに、親の概念を知る必要があります。
最後に、static
などの特定の機能の場合::about(...)
、使用するアイコンを最初に検索する場所はですparent->icon()
。
したがって、プラットフォーム固有の優れた動作を取得し、コードをクロスプラットフォームにしたい場合は、適切な親をそれに渡すことをお勧めします。
ダイアログの親子階層は、さまざまなプラットフォームでのウィンドウスタック動作を定義します。ダイアログPをダイアログCの親として渡すと、すべての(デスクトップ)プラットフォームでCがPの上に表示されます。0を渡すと、ウィンドウスタックが異なり、通常は期待どおりに動作しません。OS Xで見た中で最悪の問題で、メインウィンドウの後ろにいくつかのメッセージボックスが表示されました。メインウィンドウはモーダルであるため、メッセージボックスにアクセスできず(ショートカットもマウスを介してウィンドウを移動することもできません)、無効になっています。助けた)。要するに、私の提案:常に賢明な親を渡す。
他の答えはおそらくより良いですが、私自身の小さな理由は、メッセージボックスが画面の中央ではなく親の中央に配置されることです...
QMessageBox
パレットとその親のスタイルシートを継承することを忘れないでください。カスタムの複雑なスタイルシートを使用するときは、アプリケーションに属していないようにメッセージを表示したくないと信じてください...
静的関数を使用せず、実際にQMessageBoxのインスタンスを作成する場合は、メモリ管理にも役立ちます。親が削除されると、インスタンスも削除されます。