質問するログイン新規登録

回答編集履歴

1

d

2018/11/20 11:36

投稿

tiitoi
tiitoi

スコア21962

answer CHANGED
@@ -1,4 +1,36 @@
1
1
  こちらのQAはどうでしょうか?
2
2
 
3
3
  [How to get active QDockWidget in QQMainWindow
4
- ](https://stackoverflow.com/questions/19511051/how-to-get-active-qdockwidget-in-qqmainwindow)
4
+ ](https://stackoverflow.com/questions/19511051/how-to-get-active-qdockwidget-in-qqmainwindow)
5
+
6
+ MainWindow クラスに以下のようなスロット関数を作成し、フォーカスが変更された際に呼ばれる QApplication::focusChanged シグナルと接続して確認したところ、現在アクティブになっている QDockWidget が取れることが確認できましたが、どうでしょうか?
7
+
8
+ main.cpp 内
9
+ ```cpp
10
+ QObject::connect(
11
+ &app,
12
+ &QApplication::focusChanged,
13
+ &mainWin,
14
+ &MainWindow::getCurrentFocus);
15
+ ```
16
+
17
+ mainwindow.cpp 内
18
+ ```cpp
19
+
20
+ void MainWindow::processFocusChange(QWidget *old, QWidget *now)
21
+ {
22
+ if (!now)
23
+ return; // アプリケーションにフォーカスしていない場合
24
+
25
+ // 現在フォーカスがある QWdiget が DockWidget の子孫かどうか調べる。
26
+ QDockWidget *dock = nullptr;
27
+ for (QObject *obj = now; obj; obj = obj->parent()) {
28
+ if (dock = qobject_cast<QDockWidget *>(obj))
29
+ break;
30
+ }
31
+
32
+ // 先祖が DockWidget の場合
33
+ if (dock) // DockWdiget の種類に応じて、なんらかの処理
34
+ qDebug() << dock->windowTitle();
35
+ }
36
+ ```