回答編集履歴

1

d

2018/11/20 11:36

投稿

tiitoi
tiitoi

スコア21956

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