MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Qtのコントロール - ツリーのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Qtのコントロール - ツリー
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == Qtにおいて、<code>QTreeWidget</code>クラスを使用してツリーをコントロールする手順を記載する。<br> <br> Qt Designerにて、ツリーのコントロールIDをTreeとしている。<br> <br><br> == ツリーの作成 == <syntaxhighlight lang="c++"> treeWidget->clear(); // ツリーの右側にアイテムの属性を表示するカラムを作成する // 初期値は1である treeWidget->setColumnCount(1); </syntaxhighlight> <br><br> == アイテムの追加 == 子アイテムは、1つずつまたは複数の同時追加を行うことができる。<br> <br> 以下の例では、トップレベルアイテムから追加している。<br> <syntaxhighlight lang="c++"> // 追加するアイテムのリスト QList<QTreeWidgetItem *> listItems; // アイテムの構築 // QTreeWidgetItemの第1引数は親アイテム(複数のアイテムを追加する場合はNULLを指定する) // 第2引数は表示文字列(複数のアイテムを追加する場合、QStringList型を指定する) QTreeWidgetItem *Item = new QTreeWidgetItem((QTreeWidget *)NULL, QStringList(str)); listItems.append(Item); // 複数のアイテムを追加した後、ツリーに追加する // 第1引数はインデックス(インデックスは0から始まる) Tree->insertTopLevelItems(0, listItems); </syntaxhighlight> <br> 次に、トップレベルのアイテムに子アイテムを追加する。<br> アイテムの構築およびアイテムリストの作成までは上記と同様であるが、アイテムリストの追加だけ異なる。<br> <syntaxhighlight lang="c++"> // 子アイテムを追加したい親アイテムのポインタ QTreeWidgetItem *pItem = ...; // 親アイテムに追加 pItem->addChildren(listItems); </syntaxhighlight> <br><br> == ツリーの展開時に追加する == 宣言と同時に子アイテムを全て追加せずに、ツリーの展開時に子アイテムを追加する。<br> <br> 展開時に送信されるシグナルは、<code>itemExpanded(QTreeWidgetItem *)</code>である。<br> 引数の<code>QTreeWidgetItem*</code>は展開時のアイテムを指しており、対応するスロットにより、引数の<code>QTreeWidgetItem*</code>に対して子アイテムを追加する。<br> <br> 標準の設定では、子アイテムが存在しない場合、展開のツマミが表示されない。<br> 展開のツマミを強制的に表示するには、アイテムの構築時に以下のようにプロパティを設定する。<br> <br> アイテムの最後尾に達した場合、展開のツマミを非表示にする必要があるため、<br> <code>item->setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicator);</code>を設定する。<br> <syntaxhighlight lang="c++"> item->setChildIndicatorPolicy(QTreeWidgetItem::ShowIndicator); </syntaxhighlight> <br><br> == 子アイテムの削除 == 上記のように、展開時にアイテムを追加する場合、まず、追加されている子アイテムを全て削除する必要がある。<br> 一括して子アイテムを削除する場合は、<code>QTreeWidgetItem::takeChildren</code>メソッドを実行する。<br> <br><br> == 現在の階層を調べる == 選択されたアイテムがトップレベルから数えて何階層目かを調べる場合、<code>QTreeWidgetItem::parent</code>メソッドを使用する。<br> (<code>QTreeWidgetItem::parent</code>メソッドにおいて、トップレベルアイテムだと<code>NULL</code>を返すのを利用している)<br> <syntaxhighlight lang="c++"> QTreeWidgetItem *parent = item; int nH = 0; while(parent = parent->parent()) { nH++; } </syntaxhighlight> <br><br> == アイテムにチェックボックスを追加する == ツリーのアイテムにチェックボックスを追加する場合、<code>pItem->setCheckState(0, Qt::Checked);</code>を実行する。<br> <br> チェックボックスの状態を取得する場合、<code>QTreeWidget</code>クラスが送信する<code>itemChanged</code>シグナルを使用する。<br> <syntaxhighlight lang="c++"> QObject::connect(Tree, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(onChecked(QTreeWidgetItem *, int))); </syntaxhighlight> <br> 受信するスロットの引数にチェックボックスの状態を持つアイテムが渡されるが、どのアイテムかは不明である。<br> そこで、アイテムに任意のデータを設定して、アイテムの場所を判別する方法がある。<br> <br> 例えば、アイテムをツリーに追加する前に、<code>pItem->setData(0, Qt::UserRole, QVariant(5));</code>として、アイテムに"5"というユニークキーを設定する。<br> スロットでは、<code>int n = pItem->data(0, Qt::UserRole).toInt();</code>を実行して、設定したデータを取得する。<br> <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:Qt]]
Qtのコントロール - ツリー
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse