Qt5再入門: QStandardItem
QStandardItemは、Qtが採用しているモデル/ビューアーキテクチャで、QStandardItemModelで利用できるデータ、情報単位です。QStandardItemModelはリストモデル(一次元データ)、テーブルモデル(二次元モデル)、ツリーモデル(階層構造)のいずれにも対応できます。
テキストの他にアイコンやチェックボックスを格納でき、フォントや背景を変更したり、ドラッグ&ドロップができたりなど、レディメイドでも非常に多機能ですが、サブクラス化しても利用できます。
モデルデータとしてすぐ利用できるこのQStandardItemは、カスタムモデルを作る工数を大幅に削減してくれるので、ついつい頼りにしてしまいます。今回は、このQStandardItemを媒介して、ブックマークデータ(クラス)を作ります。以下は、そのヘッダーファイルです。
// bookmark.h
#ifndef BOOKMARK_H
#define BOOKMARK_H
#include <QString>
#include <QList>
#include <QStandardItem>
class Bookmark
{
QString label_;
QString server_;
QString path_;
public:
static const int COL_LABEL;
static const int COL_SERVER;
static const int COL_PATH;
Bookmark();
Bookmark(const QList<QStandardItem*> &list);
QString label() const { return label_; }
QString server() const { return server_; }
QString path() const { return path_; }
};
#endif // BOOKMARK_H
ブックマークデータは、ラベル、サーバー名、パス名で構成されます。ラベルは単にラベルとして、サーバー名とパス名は、NotesクライアントまたはDominoサーバにアクセスするPathNetデータとして使用します。
// bookmark.cpp
#include "bookmark.h"
const int Bookmark::COL_LABEL = 0;
const int Bookmark::COL_SERVER = 1;
const int Bookmark::COL_PATH = 2;
Bookmark::Bookmark()
: label_()
, server_()
, path_()
{}
Bookmark::Bookmark(const QList<QStandardItem*> &list)
: label_(list.at(COL_LABEL)->data(Qt::DisplayRole).toString())
, server_(list.at(COL_SERVER)->data(Qt::DisplayRole).toString())
, path_(list.at(COL_PATH)->data(Qt::DisplayRole).toString())
{}
ブックマークは1行で1データですが、テーブル上はQStandardItem3つの横並びとして存在します。1行分のデータ(QList<QStandardItem*>)をコンストラクタに渡せば、1列目をラベル、2列目をサーバー名、3列目をパスとしてパースして保持してくれます。
Qt::DisplayRoleは、enum Qt::ItemDataRoleの1つで、表示に使用するデータを指し示すロール(役割)で、QString型(文字列)になります。編集時に使用する値用のロールとして Qt::EditRole というのもありますが、これも文字列です。文字列以外の値を持たせたい時は、Qt::UserRoleを通してQVariant型としてデータを渡します。今回、ラベル、サーバー名、パス名の3つのフィールドはすべて文字列なので、ここではDisplayRoleを使っています。
次回はこれを利用するQStandardItemModelについて話します。
この記事が気に入ったらサポートをしてみませんか?