LoginSignup
4
1

More than 3 years have passed since last update.

QTabWidgetの各タブに個別の.uiファイルを使う

Last updated at Posted at 2020-08-31

概要

twitterで そんな話が出た 。1, 2がすぐに思いついたけど、もしかしたら3じゃね?と思ったので書いておく。酔っぱらって帰ってきて書いているので何を書いているかよく分からない。
多分tab1でURL入力してボタン押すとtab2で文字列表示するとかそんな感じ。httpsが表示できないのはいつものこと。QWebViewが無くなっててチビった。
コードは Github に置いておく。

分からないところがあればtwitterの @Atsushi4 アカウントに投げると返信が有るかもしれないし無いかもしれない。

その1 (sample1)

ui->tabWidget->addTab(new MyWidget1, "tab 1"); する。
QTabWidgetの中身をcppで構築する方法。

  1. UIファイルを開いてQTabWidgetを右クリック。「Xページ中のXページ目」→「削除」で全タブ削除。
  2. MainWindowでaddTabする。

以上。

その2 (sample2)

「格上げ」を使って、UIファイルで追加したタブのQWidgetを自前クラスに格上げする方法。

  1. UIファイルを開き、オブジェクトインスペクタ(?)でQTabWidget内のtab(QWidgetクラス)を右クリック。「格上げ先を指定...」を選択。
    image.png

  2. クラス名 MyWidget1, ヘッダファイル mywidget1.h、グローバルにインクルードする にチェックして「追加」、そのまま「格上げ」。
    image.png

  3. 同様にtab_2をMyWidget2へ格上げ。

以上。

その3 (sample3)

さて、ここまで来て「そもそも件の質問は『各タブごとに.uiのファイルに分ける』と書かれていて、クラスに分けるとは言っていない」ということに気づいた。
つまりuiファイルだけを分けたいということかしら?ということで書いてみたのがこちら。

  1. UIファイルをタブの数だけ作る。
  2. 全部メンバに持って全部includeしてそれぞれsetupUiする。

以上。

できなくはないけど親ウィジェットの処理が膨らむし、メンバは増えるし見通しは悪いし、製品コードではクラスを分ける方が無難だと思いますよ・・・。
あと、複数のuiファイルで同じobjectNameのウィジェット作るととても残念なことになるのでお気をつけて。

あとがき

ちなみに今回QWidgetを継承したMyWidgetXをQtCreatorから作成したら #include <QtGui/QWidget> ってなったので xxx って思った。(Qt Creator 4.10.2 Based on Qt 5.13.2(MSVC 2017, 32bit))
あと、フォームエディタのシグナル/スロットエディタで格上げしたtabとtab_2のシグナル、スロットが接続できなくて残念だった。(小並感)

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1