2

2つのGUIアプリケーションがあります。マスターはスレーブを開始する必要があります。マスターはフォアグラウンドで開始する必要があり、スレーブはバックグラウンドで開始する必要があります。スレーブは後でフォアグラウンドに来る必要があります。

Qtを使用してこれを達成する方法はありますか?

これまでの試み:

... 
if( master() ) {
  window->show();
} else {
  window->showMinimized();
}

showMinimized()スレーブが最初にフォアグラウンドに来ると、「最大化」されるという厄介な副作用があります。

では、別のアプリケーションの背後でアプリケーションを起動する方法はありますか?

4

1 に答える 1

2

1 つの可能性は、それぞれのウィンドウで明示的にraise()orを呼び出すことです ( docsを参照)。ただし、これにより一時的な視覚的な不具合が発生する可能性があります。ウィンドウが一時的に表示された後、背面に押し込まれますが、これは許容される場合と許容されない場合があります。アプリケーションをフォアグラウンドに強制するために使用することを提案するつもりでしたが、ドキュメントでは、これは Windows では許可されていないことに注意してください。lower()QWidget::activateWindow()

もう 1 つのオプションは、ウィジェットがアクティブになるのを止めようとすることです。QWidgetPrivate::show_sys()(の)のQtソースをざっと見てきましたsrc/gui/kernel/qwidget_win.cppQt::WA_ShowWithoutActivatingウィンドウがどのように表示されるかを指示する属性があるようです。これで問題が解決するようです。たとえば、フォーカスを盗むことなく Qt でウィンドウを表示するを参照してください。

于 2012-10-11T15:35:00.490 に答える