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

回答編集履歴

3

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

2020/04/08 14:03

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -1,22 +1,29 @@
1
- 横書きに修正は、幾つか方法があります。
1
+ ## 横書きに修正
2
2
 
3
+ 幾つか方法があります。
4
+
3
5
  - QProxyStyleを使う (paintControl) PyQt5 の場合は注意点有り (PySideは未テスト)
4
6
  - QTabBar の paintEvent をオーバーライドする (自分で描画処理を書く)
5
7
  - QTabBar.setTabButton を使う
6
8
 
7
9
 
8
- 背景画像については、何処の文字と重ねるのでしょうか?
10
+ ----
9
- - タブの文字重ねる
11
+ ## 背景画像ついて
10
- - タブの文字と、コンテンツ内両方
11
12
 
13
+ ```diff
12
- `QWidget{background-image: url(C:/work/bottomBlue.png);`
14
+ - `QWidget{background-image: url(C:/work/bottomBlue.png);`
15
+ + `QTabBar::tab{background-image: url(C:/work/bottomBlue.png);`
16
+ ```
13
17
 
14
-
15
18
  QWidgetは多くのウィジェットが継承しているクラスなので、
16
19
  ボタンなども影響を受けてしまいます。
17
- タブ部分のスタイルを設定するなら、QWidget ではなく QTabBar::tab に記述。
20
+ タブ部分のスタイルを設定するなら、QWidget ではなく **QTabBar::tab** に記述。
18
21
  また、Qt の スタイルシートでは transform はサポートされてなかったはずです。
19
22
 
23
+ ![イメージ説明](893b6e51f3b07f1f069f1d5bfc28a13d.png)
24
+
25
+ ※↑色を変えただけみたいになってますが、壁紙画像を指定してます。
26
+
20
27
  [Qt5 Stylesheet reference](https://doc.qt.io/qt-5/stylesheet-reference.html)
21
28
 
22
29
  ----

2

参考リンクを追加

2020/04/08 14:03

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -25,6 +25,7 @@
25
25
 
26
26
  追記: C++で動作確認したときのコードです。(QProxyStyleを利用して横書きに修正)
27
27
 
28
+
28
29
  ```cpp
29
30
 
30
31
  #include <QApplication>
@@ -91,6 +92,7 @@
91
92
 
92
93
  応用すれば、縦書きも可能です。
93
94
 
95
+ 参考: [13293-QTabWidget-customization](https://www.qtcentre.org/threads/13293-QTabWidget-customization)
94
96
 
95
97
  ----
96
98
  ### 簡単な方法

1

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

2020/04/06 20:11

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -23,8 +23,83 @@
23
23
 
24
24
  ## 横書きに修正
25
25
 
26
+ 追記: C++で動作確認したときのコードです。(QProxyStyleを利用して横書きに修正)
27
+
28
+ ```cpp
29
+
30
+ #include <QApplication>
31
+ #include <QMainWindow>
32
+ #include <QTabWidget>
33
+ #include <QTabBar>
34
+ #include <QLabel>
35
+
36
+ #include <QProxyStyle>
37
+ #include <QStyleOption>
38
+ #include <QtCore>
39
+
40
+
41
+ class CustomTabStyle : public QProxyStyle {
42
+ public:
43
+ QSize sizeFromContents(ContentsType type, const QStyleOption* option,
44
+ const QSize& size, const QWidget* widget) const {
45
+
46
+ QSize s = QProxyStyle::sizeFromContents(type, option, size, widget);
47
+ if (type == QStyle::CT_TabBarTab) {
48
+ s.transpose();
49
+ }
50
+ return s;
51
+ }
52
+
53
+ void drawControl(ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget) const {
54
+ if (element == CE_TabBarTabLabel) {
55
+ if (const QStyleOptionTab* tab = qstyleoption_cast<const QStyleOptionTab*>(option)) {
56
+ QStyleOptionTab opt(*tab);
57
+ opt.shape = QTabBar::RoundedNorth;
58
+ QProxyStyle::drawControl(element, &opt, painter, widget);
59
+ return;
60
+ }
61
+ }
62
+ QProxyStyle::drawControl(element, option, painter, widget);
63
+ }
64
+ };
65
+
66
+ int main(int argc, char *argv[])
67
+ {
68
+ QApplication app(argc, argv);
69
+ QMainWindow win;
70
+ QTabWidget tab(&win);
71
+ QLabel labelA("Hello", &tab);
72
+ QLabel labelB("Hello", &tab);
73
+ CustomTabStyle style;
74
+
75
+ tab.addTab(&labelA, "日本語");
76
+ tab.addTab(&labelB, "OK");
77
+ tab.setTabPosition(QTabWidget::West);
78
+ tab.tabBar()->setStyle(&style);
79
+
80
+ win.setWindowTitle("Test");
81
+ win.setCentralWidget(&tab);
82
+ win.show();
83
+
84
+ return app.exec();
85
+ }
86
+
87
+ ```
88
+
89
+ ![イメージ説明](143786c9d4b1f9386eee54a00814f9c3.png)
90
+ ![イメージ説明](a54af773107510932e784e8e24bd274b.png)
91
+
92
+ 応用すれば、縦書きも可能です。
93
+
94
+
95
+ ----
26
96
  ### 簡単な方法
27
97
 
98
+ **追記: 以下はPythonのコードでした。**
99
+
100
+ コードは参考になりませんが、
101
+ アプローチ自体はC++でも同様の方法で可能です。
102
+
28
103
  ```
29
104
  tab.addTab(widget, "")
30
105
  tab.tabBar().setTabButton(0, QTabBar.LeftSide, QLabel("日本語", tab))
@@ -33,11 +108,12 @@
33
108
  ----
34
109
  ### QTabBar のサブクラスで描画する方法
35
110
 
111
+ **追記: 以下はPythonのコードでした。**
112
+
36
113
  [PyQt5 メモ tab2.py](http://penguinitis.g1.xrea.com/computer/programming/Python/PyQt5/PyQt5-memo/PyQt5-memo.html)
37
114
 
38
115
  paintEvent() をオーバーライドして、自分で描画処理を書きます。
39
116
 
40
- ----
41
117
  ### QProxyStyleを使う方法
42
118
 
43
119
  こちらも自分で描画処理を書けますが、
@@ -66,12 +142,6 @@
66
142
  tab.tabBar().setStyle(FixTabStyle())
67
143
  ```
68
144
 
69
- 詳しい説明は省きますが、
145
+ ~~詳しい説明は省きますが、
70
146
  C++のクラスに対してPythonの関数を設定しても呼ばれないので、
71
- PyQtの提供する PythonのQTabBar を設定してます。(ここはC++であれば不要)
147
+ PyQtの提供する PythonのQTabBar を設定してます。(ここはC++であれば不要)~~
72
-
73
-
74
- ![イメージ説明](143786c9d4b1f9386eee54a00814f9c3.png)
75
- ![イメージ説明](a54af773107510932e784e8e24bd274b.png)
76
-
77
- 応用すれば、縦書きも可能です。