4

QMessageBoxたとえば、次のコードで、の親を設定することの利点が何であるかを理解できません。

void mainWindow::showMessage(QString msg) {
  QMesageBox::information(this, "title", msg); //'this' is parent
}

誰かが私を助けることができますか?

4

5 に答える 5

7

おそらくいくつかのこと。まず、QMessageBoxから継承しQDialogます。QDialog親の概念があるのでQMessageBox、一貫性のためにもすべきです。

具体的には、ドキュメントには次のように書かれています。

親はQDialogコンストラクターに渡されます。

少なくとも、新しいダイアログは親の上部の中央に表示されることがよくあります。

しかし、もっとあります!

ドキュメントによると、実際に機能に影響を与える可能性があります。例えば:

Mac OS Xで、メッセージボックスをそののQt :: Sheetとして表示する場合は、メッセージボックスのウィンドウモダリティをQt :: WindowModalに設定するか、open()を使用します。それ以外の場合、メッセージボックスは標準のダイアログになります。

また、「ウィンドウモダリティ」と「アプリケーションモダリティ」の両方の概念があり、前者は親ウィンドウへの入力のみを防止し、後者はアプリケーション全体への入力を防止します。これには明らかに、親の概念を知る必要があります。

最後に、staticなどの特定の機能の場合::about(...)、使用するアイコンを最初に検索する場所はですparent->icon()

したがって、プラットフォーム固有の優れた動作を取得し、コードをクロスプラットフォームにしたい場合は、適切な親をそれに渡すことをお勧めします。

于 2011-07-19T21:17:59.223 に答える
2

ダイアログの親子階層は、さまざまなプラットフォームでのウィンドウスタック動作を定義します。ダイアログPをダイアログCの親として渡すと、すべての(デスクトップ)プラットフォームでCがPの上に表示されます。0を渡すと、ウィンドウスタックが異なり、通常は期待どおりに動作しません。OS Xで見た中で最悪の問題で、メインウィンドウの後ろにいくつかのメッセージボックスが表示されました。メインウィンドウはモーダルであるため、メッセージボックスにアクセスできず(ショートカットもマウスを介してウィンドウを移動することもできません)、無効になっています。助けた)。要するに、私の提案:常に賢明な親を渡す。

于 2011-07-19T21:32:15.697 に答える
2

他の答えはおそらくより良いですが、私自身の小さな理由は、メッセージボックスが画面の中央ではなく親の中央に配置されることです...

于 2011-07-19T21:35:33.473 に答える
1

QMessageBoxパレットとその親のスタイルシートを継承することを忘れないでください。カスタムの複雑なスタイルシートを使用するときは、アプリケーションに属していないようにメッセージを表示したくないと信じてください...

于 2011-07-20T13:25:16.117 に答える
1

静的関数を使用せず、実際にQMessageBoxのインスタンスを作成する場合は、メモリ管理にも役立ちます。親が削除されると、インスタンスも削除されます。

于 2011-07-29T07:33:55.030 に答える