メイン ウィンドウ (QMainWindow) と、補助情報とオプション (ヘルパーと呼びましょう) を提供する Qt::WindowStaysOnTopHint フラグを持つウィジェットがあります。メイン ウィンドウで作業してから他のアプリケーションをクリックすると、このウィンドウはアクティブではなくなります (isActiveWindow() == false)。しかし、最初にヘルパーを使用してから、(メイン ウィンドウではなく) 他のアプリケーション/ウィンドウに切り替えると、アクティブなままになります。ヘルパー ウィンドウから他のアプリケーションへの切り替えを処理するにはどうすればよいですか? このため、QApplication::activeWindow() でさえ true を返します。
.h ファイル:
//! Popup structure that contains listw_popup that shows tips
struct PopupWidget {
PopupWidget(QWidget*);
QWidget *base;
QListWidget *listw_popup;
};
class MainWindow : public QMainWindow
{
...
private :
PopupWidget popup_spec;
...
}
.cpp ファイル:
PopupWidget::PopupWidget(QWidget* parent)
{
base = new QWidget(parent, Qt::SplashScreen | Qt::WindowStaysOnTop);
listw_popup = new QListWidget(base);
}
MainWindow::MainWindow(QWidget *parent) : ... popup_spec(this) ...
{
...
}
popup_spec.base.show() が呼び出されると、このウィジェットが表示されます。そして、このウィジェットをクリックすると (ウィジェットがアクティブになることを意味します)、他のアプリケーションに切り替えてもアクティブのままになります。