【Qt】【QListView】QListViewの選択項目の取得
QListViewの選択項目の取得には以下の2通りの方法があります。
- フォーカス中のアイテムの取得
- 選択状態のアイテムの取得
まずはそれぞれの方法を示します。
- フォーカス中のアイテムの取得
QStandardItem * item = NULL; // フォーカス中のアイテムのインデックスを取得 const QModelIndex index = listView->selectionModel()->currentIndex(); item = model->itemFromIndex(index); Q_ASSERT(item);
- 選択状態のアイテムの取得
QStandardItem * item = NULL; QList<QStandardItem *> listItem; // 選択項目のインデックスリスト(選択順) QModelIndexList listIndex = listView->selectionModel()->selectedIndexes(); foreach ( QModelIndex index, listIndex ) { item = model->itemFromIndex( index ); Q_ASSERT(item); listItem << item; }
見ていただければわかるように、この2つの方法には以下の違いがあります。
- フォーカス中の項目の取得は1つのアイテムインデックスが得られる
- 選択中の項目の取得は複数のアイテムインデックスが得られる
設定をしない限りは同時に選択できる項目が1つのみのため、
得られる結果に違いはありません。
ただし、複数選択を可能とした場合には、
後者の方法が見かけの選択項目と同じ項目を返します。
複数選択は、以下の設定をすることで可能となります。
// 選択モードを複数選択に設定
listView->setSelectionMode( QAbstractItemView::ExtendedSelection );
参考
【Qt】【QListView】QListViewの項目の追加
QListView に項目の追加する方法を示します。
まずは、前準備として以下のようにモデルの設定します。
// リストビュー QListView *listView; listView = new QListView(); Q_CHECK_PTR(listView); // 表示モデルを用意 QStandardItemModel * model = new QStandardItemModel(); // モデルの設定 listView->setModel(model);
この ListView にテキストの項目を追加する場合、 以下のようにモデルの参照を取得して追加します。
// 追加アイテムのテキストリスト QStringList listItemText; listItemText << "murmur"; listItemText << "chant"; listItemText << "pray"; listItemText << "invoke!"; // 設定モデルの取得 QStandardItemModel * model = qobject_cast<QStandardItemModel*>(listView->model()); // テキストアイテムの追加 QStandardItem * item = NULL; foreach ( QString text, listItemtext ) { item = new QStandardItem(); Q_CHECK_PTR(item); item->setText( text ); item->setEditable( false ); model->appendRow( item ); // リストビューはアイテムを列に追加 }
【VBA】ワークシートを巡回する
ブックの全てのワークシートは Worksheets で呼ぶことができます。
この複数のワークシートに対して特定の操作をするために、
VBAの繰り返しステートメントの一つ For Each を用います。
For Each ws In Worksheets ' ワークシートの名前をデバッグプリント Debug.Print wsMain.Name Next ws
ただし、C++などにある次のループまで処理をスキップする Continue 文は存在しません。 そのため、処理のスキップには GoTo 文を使います。
For Each ws In Worksheets ' ワークシート main はスキップ If wsMain.Name = "main" Then GoTo Continue End If ' ワークシートの名前をデバッグプリント Debug.Print wsMain.Name Continue: ' GoTo でここまでスキップされる Next ws
参考
【Doxygen】Doxygen Tips
コードドキュメントツールの Doxygen がいい感じなので、
利用に際して気にすることを記します。
関数コールツリーの表示
関数コールツリーの表示は Topix "Dot" の "HAVE_DOT" にチェックを入れて、
"CALL_GRAPH", "CALLER_GRAPH" にチェックを入れることで可能となります。
ツール "dot" はグラフ可視化ツール Graphviz の一部なので、 Graphviz をインストールしておく必要があります。
ShiftJISのコメントを表示する
ShiftJISのコメントの表示は、Topix "Input" の
"INPUT_ENCODING" に "CP932" を設定することで可能となります。
(CP932 は Windows で使用されている MS による ShiftJIS 拡張です。)
参考
【Qt】テキストファイルの行数を取得する
行数の数え上げはQTextStream::readLine()を用います。
以下は実際に読んだ行数を返す例です。
int countLine(QString filePath) { int line_count=0; QFile file(filePath); file.open(QIODevice::ReadOnly); //| QIODevice::Text) QTextStream in(&file); while( !in.atEnd()) { in.readLine(); line_count++; } return line_count; }
参考
Qt - How to count number of line in .txt file - Stack Overflow
【Qt】【QList】リストの中身を取り出す
QListの中の値を取得するにはメソッドat()やオペレーター[]を利用します。
それとは別に、QListの中の値を得て、QListから取り除くきたい。
そんなときはメソッドtakeAt()を用います。
先頭または最後に対して同様の操作をする場合は、
takeFirst(), takeLast()を用います。
以下はリストが空になるまで先頭から順に取り出す例です。
#include <QtCore> void takeAtList() { QList<QString> list; list << "A" << "B" << "C" << "D" << "E" << "F"; while(list.size() > 0) { QString item = list.takeFirst(); qDebug("%s, %d: item=[%s]", __FILE__, __LINE__, qPrintable(item)); } // output "A", "B", "C", "D", "E", "F" }