データベースから画像を .csv ファイルに表示する方法に興味がありますQTableView
。
QTableWidgetItem
で使用できるようなものはありQTableView
ますか?
私は使用しますQSqlTableModel
。
データベースから画像を .csv ファイルに表示する方法に興味がありますQTableView
。
QTableWidgetItem
で使用できるようなものはありQTableView
ますか?
私は使用しますQSqlTableModel
。
大まかなアイデアは、 を使用QStandardItem::setData
してQPixmap
(に変換されたQVariant
) を設定し、 を に設定することQStandardItem
ですQStandardItemModel
。
シーケンス: QImage
---> QPixmap
---> QVariant
---> QStandardItem
--->QStandardItemModel
例えば:
QStandardItemModel *model = new QStandardItemModel;
QImage image(":/cat/lovers/own/myCat.jpg");
QStandardItem *item = new QStandardItem();
item->setData(QVariant(QPixmap::fromImage(image)), Qt::DecorationRole);
model->setItem(0, 0, item);
ui->tableView->setModel(model);
必要に応じて、画像またはセルのサイズを変更する必要があります。
[編集]
を使用している場合はQSqlTableModel
、そのまま使用してください。これらのパス文字列を作成しQPixmap
、アイテムの役割をQt::DecorationRole
その列に設定するだけです。
ドキュメントが言うように:
各項目には関連付けられた多数のデータ要素があり、モデルの data() 関数にロール (Qt::ItemDataRole を参照) を指定することで取得できます。
これを行うためのコンセプトQTableView
はQVariant
単純です。QPixmap
QTableView
Qt::DecorationRole
QSqlTableModel
仮想関数をサブクラス化して再実装しQVariant data(const QModelIndex & index, int role = Qt::DisplayRole)
、イメージ列が装飾ロールを使用してQPixmap
asを返すようにすることができます。QVariant
したがって、次のようにします。
QVariant CustomSqlTableModel::data(const QModelIndex &idx, int role = Qt::DisplayRole) const
{
if (idx.column() == imageColumn) {
QString imgFile = QSqlTableModel::data(idx, Qt::DisplayRole); // get path string
if (role == Qt::DisplayRole)
return QString(); // return the path string for display role
QImage image(imgFile);
/* some modification to the image, maybe */
QPixmap pixmap(imgFile);
if (role == Qt::DecorationRole)
return pixmap; // return QPixmap for decoration role
if (role == Qt::SizeHintRole)
return pixmap.size(); // in case need the image size
}
return QSqlTableModel::data( idx, role ); // use original data() outside the imageColumn
}
また、独自のデリゲートをカスタマイズするためにサブクラス化QStyledItemDelegate
と関数の再実装を試みることもpaint()
できますが、それにはより複雑な作業が必要になります。デリゲートを使用した例は、こちらにあります。ボタンでさえも、デリゲートで好きなものを描くことができます。
*申し訳ありませんが、手元にデータベースがないため、コードはテストされていません。