MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Qtのコントロール - リストのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Qtのコントロール - リスト
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == Qtにおいて、<code>QListWidget</code>クラスを使用してリストのコントロールの手順を記載する。<br> <br> <u>似た名前のウィジェットにリストビューがあるので間違えないように注意すること。</u><br> <br> ここでは、リストのコントロールIDをlistWidgetとしている。<br> <br><br> == アイテムの追加 == <syntaxhighlight lang="c++"> listWidget->clear(); // 文字列を追加する場合 listWidget->addItem( tr("何か文字列") ); </syntaxhighlight> <br><br> == 現在のアイテムの文字列を取得 == <syntaxhighlight lang="c++"> QListWidgetItem *pItem = listWidget->currentItem(); QString str = pItem->text(); </syntaxhighlight> <br><br> == 選択されているアイテムを取得 == 複数選択が有効になっている場合、複数選択されているアイテムを取得するため、以下のように記述する。<br> <syntaxhighlight lang="c++"> // 選択されているアイテムのリストを取得 QList<QListWidgetItem *> listItems = listWidget->selectedItems(); // 個別のアイテムに対する処理 for(int i = 0; i < listItems.size(); i++) { QListWidgetItem *pItem = listItems[i]; } </syntaxhighlight> <br><br> == 選択されているアイテムの削除 == Qtの公式ドキュメントには、<code>takeItem</code>メソッドを使用してリストのアイテムを削除するとの記述があるが、<br> <code>takeItem</code>メソッドは引数に行番号を1つ渡すだけであるため、複数選択の場合、それらをまとめて削除することができない。<br> <br> 複数選択の場合、まとめて削除する方法は、以下のように記述する。<br> <syntaxhighlight lang="c++"> qDeleteAll(listWidget->selectedItems()); </syntaxhighlight> <br> また、以下の方法においても、まとめて削除することができる。<br> <syntaxhighlight lang="c++"> QList<QListWidgetItem *> itemList = listWidget->selectedItems(); for(int i=0; i < itemList.size(); i++) { widget->takeItem(listWidget->indexFromItem(itemList[i])); } </syntaxhighlight> <br><br> == リストにファイル名リストを追加する == ファイル名に数を含む場合、例えば、"file1 file2 ... file10 file11"のようなファイル名リストをコントロールに追加する場合、<br> リストの標準メソッドに存在するソートを使用すると、"file1 file10 file11 file2 ..."のように並び替えられてしまう。<br> <br> そこで、リストの標準メソッドを使用せずに、独自にソート関数を作成してコントロールに追加する必要がある。<br> Windowsの場合、<code>StrCmpLogicalW</code>関数がこのような文字列を数字順にソートすることができる。 <br> <syntaxhighlight lang="c++"> // MainWindow.cpp // 比較関数 bool MainWindow::lessThan(QString &left, QString &right) { LPCWSTR pszwLeft, pszwRight; #if defined(Q_OS_WIN) pszwLeft = (LPCWSTR)left.unicode(); pszwRight = (LPCWSTR)right.unicode(); #elif defined(Q_OS_LINUX) #endif return StrCmpLogicalW(pszwLeft, pszwRight) < 0; } // 複数選択したファイルリストをリストウィジェットに追加する関数 void MainWindow::browseImage() { QStringList strlFName = QFileDialog::getOpenFileNames(this, "Select files", "C:\\", "File(*.*)"); if(strlFName.size() == 0) { return; } qSort(strlFName.begin(), strlFName.end(), lessThan); for(int i = 0; i < strlFName.size(); i++) { listWidget->addItem(strlFName.at(i)); } } </syntaxhighlight> <br> <syntaxhighlight lang="c++"> // MainWindow.h class MainWindow : public QMainWindow { Q_OBJECT // ...略 void browseImage(); static bool lessThan(QString &left, QString &right); // ...略 }; </syntaxhighlight> <br> QTreeViewクラスやQTableViewクラスの場合は、QSortFilterProxyModelクラスを継承した派生クラスを作成してセットする方法もある。<br> 以下のGoogle codeのプロジェクトが採用している。<br> [http://code.google.com/p/kamicmd/ kamicmd - Modern file manager - Google Project Hosting]<br> <br><br> __FORCETOC__ [[カテゴリ:Qt]]
Qtのコントロール - リスト
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse