回答編集履歴
8
書式の修正
answer
CHANGED
@@ -34,6 +34,7 @@
|
|
34
34
|
※ ない場合は、Qt 開発環境のインストールが必要
|
35
35
|
- `translater.load` で .qm ファイルを読み込む
|
36
36
|
|
37
|
+
----
|
37
38
|
|
38
39
|
> これらのメニューに表示される項目を減らす方法
|
39
40
|
> そしてこれらのメニューに機能を追加することです
|
7
追記: TSファイルのサンプル
answer
CHANGED
@@ -8,6 +8,33 @@
|
|
8
8
|

|
9
9
|
|
10
10
|
|
11
|
+
追記: .ts ファイルのサンプル
|
12
|
+
```xml
|
13
|
+
<?xml version="1.0" encoding="utf-8"?>
|
14
|
+
<!DOCTYPE TS>
|
15
|
+
<TS version="2.1" language="ja">
|
16
|
+
<context>
|
17
|
+
<name>RenderViewContextMenuQt</name>
|
18
|
+
<message>
|
19
|
+
<source>Forward</source>
|
20
|
+
<translation>進む</translation>
|
21
|
+
</message>
|
22
|
+
<message>
|
23
|
+
<source>Back</source>
|
24
|
+
<translation>戻る</translation>
|
25
|
+
</message>
|
26
|
+
</context>
|
27
|
+
</TS>
|
28
|
+
```
|
29
|
+
|
30
|
+
手順
|
31
|
+
- 上記のXMLを拡張子 .ts で保存します。文字コードは utf-8
|
32
|
+
- 他の文字の翻訳は、サンプルを参考に `<message>` を増やしてください。
|
33
|
+
- lrelease コマンドで .ts ファイルから .qm ファイルを生成
|
34
|
+
※ ない場合は、Qt 開発環境のインストールが必要
|
35
|
+
- `translater.load` で .qm ファイルを読み込む
|
36
|
+
|
37
|
+
|
11
38
|
> これらのメニューに表示される項目を減らす方法
|
12
39
|
> そしてこれらのメニューに機能を追加することです
|
13
40
|
|
6
サンプルコードの更新、実行可能な形式に
answer
CHANGED
@@ -18,34 +18,59 @@
|
|
18
18
|
追記: page().createStandardContextMenu() で可能でした。
|
19
19
|
|
20
20
|
```python
|
21
|
+
|
22
|
+
import sys
|
23
|
+
from PyQt5.QtCore import Qt, QUrl
|
24
|
+
from PyQt5.QtWidgets import (
|
25
|
+
QApplication,
|
26
|
+
QMainWindow,
|
27
|
+
QMessageBox,
|
28
|
+
QAction,
|
29
|
+
QMenu,
|
30
|
+
)
|
31
|
+
from PyQt5.QtWebEngineWidgets import (
|
32
|
+
QWebEngineView,
|
33
|
+
QWebEnginePage,
|
34
|
+
)
|
35
|
+
|
21
36
|
## 方法1 contextMenuEvent
|
22
37
|
# QWebEngineView を継承したサブクラスを作る
|
23
38
|
|
24
39
|
class MyWebEngineView(QWebEngineView):
|
25
40
|
|
41
|
+
def showTestDialog(self):
|
42
|
+
QMessageBox.information(self, "Test", f"test action was called")
|
43
|
+
|
26
44
|
def contextMenuEvent(self, event):
|
27
45
|
## 既存のメニューをカスタマイズする場合
|
28
46
|
menu = self.page().createStandardContextMenu()
|
29
47
|
|
30
48
|
# ここで QMenu メニューをカスタマイズ
|
49
|
+
menu.addSeparator()
|
31
50
|
|
51
|
+
action = QAction("Test")
|
52
|
+
action.triggered.connect(self.showTestDialog)
|
53
|
+
menu.addAction(action)
|
54
|
+
|
32
55
|
menu.aboutToHide.connect(menu.deleteLater)
|
33
56
|
menu.exec_(event.globalPos())
|
34
57
|
|
35
58
|
|
36
|
-
## 方法2 CustomContextMenu
|
59
|
+
## 方法2 CustomContextMenu
|
37
60
|
|
38
|
-
|
61
|
+
def createWebView(parent):
|
62
|
+
view = QWebEngineView(parent)
|
39
63
|
|
40
64
|
def saveLink():
|
41
|
-
|
65
|
+
# 既存のメニューの機能を呼び出し
|
42
66
|
view.triggerPageAction(
|
43
67
|
QWebEnginePage.CopyLinkToClipboard)
|
44
68
|
|
45
69
|
def customContextMenuRequested(pos):
|
46
|
-
## 新規にメニューを作る
|
70
|
+
## 新規にメニューを作る場合
|
47
71
|
menu = QMenu(view)
|
48
72
|
|
73
|
+
# ここで QMenu メニューをカスタマイズ
|
49
74
|
action = QAction("Save Link")
|
50
75
|
action.triggered.connect(saveLink)
|
51
76
|
menu.addAction(action)
|
@@ -53,9 +78,29 @@
|
|
53
78
|
menu.aboutToHide.connect(menu.deleteLater)
|
54
79
|
menu.exec_(view.mapToGlobal(pos))
|
55
80
|
|
81
|
+
# カスタムメニューの為の設定
|
56
82
|
view.setContextMenuPolicy(Qt.CustomContextMenu)
|
57
83
|
view.customContextMenuRequested.connect(customContextMenuRequested)
|
58
84
|
|
85
|
+
return view
|
86
|
+
|
87
|
+
|
88
|
+
def main():
|
89
|
+
app = QApplication(sys.argv)
|
90
|
+
win = QMainWindow()
|
91
|
+
view = MyWebEngineView(win)
|
92
|
+
# view = createWebView(win)
|
93
|
+
|
94
|
+
view.setUrl(QUrl("https://www.google.com/"))
|
95
|
+
win.setCentralWidget(view)
|
96
|
+
win.resize(600, 600)
|
97
|
+
win.show()
|
98
|
+
sys.exit(app.exec_())
|
99
|
+
|
100
|
+
|
101
|
+
if __name__ == '__main__':
|
102
|
+
main()
|
103
|
+
|
59
104
|
```
|
60
105
|
|
61
106
|
Context Menu (右クリック時のメニュー) のカスタマイズ方法
|
5
方法2 のカスタムメニューの例を追加
answer
CHANGED
@@ -18,15 +18,44 @@
|
|
18
18
|
追記: page().createStandardContextMenu() で可能でした。
|
19
19
|
|
20
20
|
```python
|
21
|
+
## 方法1 contextMenuEvent
|
21
22
|
# QWebEngineView を継承したサブクラスを作る
|
22
23
|
|
24
|
+
class MyWebEngineView(QWebEngineView):
|
25
|
+
|
23
26
|
def contextMenuEvent(self, event):
|
27
|
+
## 既存のメニューをカスタマイズする場合
|
24
28
|
menu = self.page().createStandardContextMenu()
|
25
29
|
|
26
30
|
# ここで QMenu メニューをカスタマイズ
|
27
31
|
|
32
|
+
menu.aboutToHide.connect(menu.deleteLater)
|
28
33
|
menu.exec_(event.globalPos())
|
29
34
|
|
35
|
+
|
36
|
+
## 方法2 CustomContextMenu
|
37
|
+
|
38
|
+
... 略
|
39
|
+
|
40
|
+
def saveLink():
|
41
|
+
print("Save Link")
|
42
|
+
view.triggerPageAction(
|
43
|
+
QWebEnginePage.CopyLinkToClipboard)
|
44
|
+
|
45
|
+
def customContextMenuRequested(pos):
|
46
|
+
## 新規にメニューを作る
|
47
|
+
menu = QMenu(view)
|
48
|
+
|
49
|
+
action = QAction("Save Link")
|
50
|
+
action.triggered.connect(saveLink)
|
51
|
+
menu.addAction(action)
|
52
|
+
|
53
|
+
menu.aboutToHide.connect(menu.deleteLater)
|
54
|
+
menu.exec_(view.mapToGlobal(pos))
|
55
|
+
|
56
|
+
view.setContextMenuPolicy(Qt.CustomContextMenu)
|
57
|
+
view.customContextMenuRequested.connect(customContextMenuRequested)
|
58
|
+
|
30
59
|
```
|
31
60
|
|
32
61
|
Context Menu (右クリック時のメニュー) のカスタマイズ方法
|
4
コード追記
answer
CHANGED
@@ -17,6 +17,18 @@
|
|
17
17
|
|
18
18
|
追記: page().createStandardContextMenu() で可能でした。
|
19
19
|
|
20
|
+
```python
|
21
|
+
# QWebEngineView を継承したサブクラスを作る
|
22
|
+
|
23
|
+
def contextMenuEvent(self, event):
|
24
|
+
menu = self.page().createStandardContextMenu()
|
25
|
+
|
26
|
+
# ここで QMenu メニューをカスタマイズ
|
27
|
+
|
28
|
+
menu.exec_(event.globalPos())
|
29
|
+
|
30
|
+
```
|
31
|
+
|
20
32
|
Context Menu (右クリック時のメニュー) のカスタマイズ方法
|
21
33
|
setContextMenuPolicy により挙動を変更できます。
|
22
34
|
|
3
既存のメニューのカスタマイズ方法について、情報更新
answer
CHANGED
@@ -11,10 +11,12 @@
|
|
11
11
|
> これらのメニューに表示される項目を減らす方法
|
12
12
|
> そしてこれらのメニューに機能を追加することです
|
13
13
|
|
14
|
-
C++ であれば、直接既存のメニューを増減してカスタマイズできますが、
|
14
|
+
~~C++ であれば、直接既存のメニューを増減してカスタマイズできますが、
|
15
15
|
Python に提供されてるクラスでは、必要なメソッドが提供されていない為
|
16
|
-
右クリック時のイベント自体を捕捉し、独自にメニューを生成する必要がありそうです。
|
16
|
+
右クリック時のイベント自体を捕捉し、独自にメニューを生成する必要がありそうです。~~
|
17
17
|
|
18
|
+
追記: page().createStandardContextMenu() で可能でした。
|
19
|
+
|
18
20
|
Context Menu (右クリック時のメニュー) のカスタマイズ方法
|
19
21
|
setContextMenuPolicy により挙動を変更できます。
|
20
22
|
|
2
説明補足
answer
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
Qt には文字等のリソース翻訳の仕組みがあります。
|
4
4
|
- [Internationalization with Qt](https://doc.qt.io/qt-5/internationalization.html)
|
5
5
|
- メニューのリソース [該当箇所 render_view_context_menu_qt.cpp](https://github.com/qt/qtwebengine/blob/dev/src/core/render_view_context_menu_qt.cpp)
|
6
|
+
※ 翻訳リソース作成の為には、対象文字だけではなく、第一引数のcontext 情報が必要です
|
6
7
|
|
7
8
|

|
8
9
|
|
1
スクリーンショットの更新
answer
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
- [Internationalization with Qt](https://doc.qt.io/qt-5/internationalization.html)
|
5
5
|
- メニューのリソース [該当箇所 render_view_context_menu_qt.cpp](https://github.com/qt/qtwebengine/blob/dev/src/core/render_view_context_menu_qt.cpp)
|
6
6
|
|
7
|
-

|
8
8
|
|
9
9
|
|
10
10
|
> これらのメニューに表示される項目を減らす方法
|