回答編集履歴

3

壁紙の設定方法についてスクリーンショットを追加

2020/04/08 14:03

投稿

teamikl
teamikl

スコア8760

test CHANGED
@@ -1,4 +1,8 @@
1
+ ## 横書きに修正
2
+
3
+
4
+
1
- 横書きに修正は、幾つか方法があります。
5
+ 幾つか方法があります。
2
6
 
3
7
 
4
8
 
@@ -12,17 +16,19 @@
12
16
 
13
17
 
14
18
 
15
- 背景画像については、何処の文字と重ねるのでしょうか?
19
+ ----
16
-
20
+
17
- - タブの文字重ねる
21
+ ## 背景画像ついて
18
-
22
+
23
+
24
+
19
- - タブの文字と、コンテンツ内両方
25
+ ```diff
20
-
21
-
22
-
26
+
23
- `QWidget{background-image: url(C:/work/bottomBlue.png);`
27
+ - `QWidget{background-image: url(C:/work/bottomBlue.png);`
28
+
24
-
29
+ + `QTabBar::tab{background-image: url(C:/work/bottomBlue.png);`
30
+
25
-
31
+ ```
26
32
 
27
33
 
28
34
 
@@ -30,12 +36,20 @@
30
36
 
31
37
  ボタンなども影響を受けてしまいます。
32
38
 
33
- タブ部分のスタイルを設定するなら、QWidget ではなく QTabBar::tab に記述。
39
+ タブ部分のスタイルを設定するなら、QWidget ではなく **QTabBar::tab** に記述。
34
40
 
35
41
  また、Qt の スタイルシートでは transform はサポートされてなかったはずです。
36
42
 
37
43
 
38
44
 
45
+ ![イメージ説明](893b6e51f3b07f1f069f1d5bfc28a13d.png)
46
+
47
+
48
+
49
+ ※↑色を変えただけみたいになってますが、壁紙画像を指定してます。
50
+
51
+
52
+
39
53
  [Qt5 Stylesheet reference](https://doc.qt.io/qt-5/stylesheet-reference.html)
40
54
 
41
55
 

2

参考リンクを追加

2020/04/08 14:03

投稿

teamikl
teamikl

スコア8760

test CHANGED
@@ -52,6 +52,8 @@
52
52
 
53
53
 
54
54
 
55
+
56
+
55
57
  ```cpp
56
58
 
57
59
 
@@ -184,6 +186,8 @@
184
186
 
185
187
 
186
188
 
189
+ 参考: [13293-QTabWidget-customization](https://www.qtcentre.org/threads/13293-QTabWidget-customization)
190
+
187
191
 
188
192
 
189
193
  ----

1

C++のコードを追加。Pythonのコードに注意書きを追記

2020/04/06 20:11

投稿

teamikl
teamikl

スコア8760

test CHANGED
@@ -48,10 +48,160 @@
48
48
 
49
49
 
50
50
 
51
+ 追記: C++で動作確認したときのコードです。(QProxyStyleを利用して横書きに修正)
52
+
53
+
54
+
55
+ ```cpp
56
+
57
+
58
+
59
+ #include <QApplication>
60
+
61
+ #include <QMainWindow>
62
+
63
+ #include <QTabWidget>
64
+
65
+ #include <QTabBar>
66
+
67
+ #include <QLabel>
68
+
69
+
70
+
71
+ #include <QProxyStyle>
72
+
73
+ #include <QStyleOption>
74
+
75
+ #include <QtCore>
76
+
77
+
78
+
79
+
80
+
81
+ class CustomTabStyle : public QProxyStyle {
82
+
83
+ public:
84
+
85
+ QSize sizeFromContents(ContentsType type, const QStyleOption* option,
86
+
87
+ const QSize& size, const QWidget* widget) const {
88
+
89
+
90
+
91
+ QSize s = QProxyStyle::sizeFromContents(type, option, size, widget);
92
+
93
+ if (type == QStyle::CT_TabBarTab) {
94
+
95
+ s.transpose();
96
+
97
+ }
98
+
99
+ return s;
100
+
101
+ }
102
+
103
+
104
+
105
+ void drawControl(ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget) const {
106
+
107
+ if (element == CE_TabBarTabLabel) {
108
+
109
+ if (const QStyleOptionTab* tab = qstyleoption_cast<const QStyleOptionTab*>(option)) {
110
+
111
+ QStyleOptionTab opt(*tab);
112
+
113
+ opt.shape = QTabBar::RoundedNorth;
114
+
115
+ QProxyStyle::drawControl(element, &opt, painter, widget);
116
+
117
+ return;
118
+
119
+ }
120
+
121
+ }
122
+
123
+ QProxyStyle::drawControl(element, option, painter, widget);
124
+
125
+ }
126
+
127
+ };
128
+
129
+
130
+
131
+ int main(int argc, char *argv[])
132
+
133
+ {
134
+
135
+ QApplication app(argc, argv);
136
+
137
+ QMainWindow win;
138
+
139
+ QTabWidget tab(&win);
140
+
141
+ QLabel labelA("Hello", &tab);
142
+
143
+ QLabel labelB("Hello", &tab);
144
+
145
+ CustomTabStyle style;
146
+
147
+
148
+
149
+ tab.addTab(&labelA, "日本語");
150
+
151
+ tab.addTab(&labelB, "OK");
152
+
153
+ tab.setTabPosition(QTabWidget::West);
154
+
155
+ tab.tabBar()->setStyle(&style);
156
+
157
+
158
+
159
+ win.setWindowTitle("Test");
160
+
161
+ win.setCentralWidget(&tab);
162
+
163
+ win.show();
164
+
165
+
166
+
167
+ return app.exec();
168
+
169
+ }
170
+
171
+
172
+
173
+ ```
174
+
175
+
176
+
177
+ ![イメージ説明](143786c9d4b1f9386eee54a00814f9c3.png)
178
+
179
+ ![イメージ説明](a54af773107510932e784e8e24bd274b.png)
180
+
181
+
182
+
183
+ 応用すれば、縦書きも可能です。
184
+
185
+
186
+
187
+
188
+
189
+ ----
190
+
51
191
  ### 簡単な方法
52
192
 
53
193
 
54
194
 
195
+ **追記: 以下はPythonのコードでした。**
196
+
197
+
198
+
199
+ コードは参考になりませんが、
200
+
201
+ アプローチ自体はC++でも同様の方法で可能です。
202
+
203
+
204
+
55
205
  ```
56
206
 
57
207
  tab.addTab(widget, "")
@@ -68,6 +218,10 @@
68
218
 
69
219
 
70
220
 
221
+ **追記: 以下はPythonのコードでした。**
222
+
223
+
224
+
71
225
  [PyQt5 メモ tab2.py](http://penguinitis.g1.xrea.com/computer/programming/Python/PyQt5/PyQt5-memo/PyQt5-memo.html)
72
226
 
73
227
 
@@ -76,8 +230,6 @@
76
230
 
77
231
 
78
232
 
79
- ----
80
-
81
233
  ### QProxyStyleを使う方法
82
234
 
83
235
 
@@ -134,20 +286,8 @@
134
286
 
135
287
 
136
288
 
137
- 詳しい説明は省きますが、
289
+ ~~詳しい説明は省きますが、
138
290
 
139
291
  C++のクラスに対してPythonの関数を設定しても呼ばれないので、
140
292
 
141
- PyQtの提供する PythonのQTabBar を設定してます。(ここはC++であれば不要)
293
+ PyQtの提供する PythonのQTabBar を設定してます。(ここはC++であれば不要)~~
142
-
143
-
144
-
145
-
146
-
147
- ![イメージ説明](143786c9d4b1f9386eee54a00814f9c3.png)
148
-
149
- ![イメージ説明](a54af773107510932e784e8e24bd274b.png)
150
-
151
-
152
-
153
- 応用すれば、縦書きも可能です。