はい、本日最後の投稿です。
今回はQSortFilterProxyModelを使います。これは他のモデルと異なり、ソートや正規表現によるフィルター処理などをサポートします。よって便利です。
コードはC++ GUI Programming with Qt4のサンプルを一部変更して使います。なお、QListViewはすでに定義してあるものとします。ではコードを
(C++ GUI Programming with Qt4 229ページより一部変更して使用)
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)//uiでGUI部品の記述 { ui->setupUi(this);//uiでGUI部品の初期化 QStringListModel *sourceModel = new QStringListModel; sourceModel->setStringList(QColor::colorNames()); QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel; proxyModel->setSourceModel(sourceModel); proxyModel->setFilterKeyColumn(0);//フィルタリング対象はカラム0とする QRegExp regExp("gr[ae]y", Qt::CaseInsensitive, QRegExp::RegExp ); proxyModel->setFilterRegExp(regExp);//正規表現をセットしフィルタリングする ui->listView->setModel(proxyModel); }
uiの部分は前回と同じなので省略します。
まずQColorの色の名前をソースとしたQstringListModelを作成します。 次に最初に作ったQStringListModelをソースとしてQSortFilterProxyModelを作成します。proxyModel->setFilterKeyColumn(0)でソースモデルのカラム0にフィルタリング処理を行うことを指定しています。
次にフィルタリングに使う正規表現 を作成しています。"gray","grey"にマッチするものを抽出するという設定にしています。QRegExpについてはリファレンスを見てください。ここでは説明しません。
次にこの正規表現をproxyModel->setFilterRegExp(regExp);でソースモデルに適用しています。
フィルターを適用した後QListViewにモデルをセットしています。
実行すると下記のようになります。
以上です。次回はアイテムビュー関連ですが未定です。