6

QTableViewデータベーステーブルの行を表示しています。この表には、データ型と呼ばれる列があり、各型のアイコン画像があります。各データ型の前にこれらのアイコンを追加するにはどうすればよいですか?

これは、 justanothercoderによって要求された私のコードの一部です。

QString msgQueryString = "select MESSAGE_ID, DATA_TYPE from SER_MESSAGES where MESSAGE_ID > 500 ";
serendibMsgTableModel->setQuery(msgQueryString, *database);
serendibMsgTableModel->setHeaderData(0, Qt::Horizontal, tr("Message ID"));
serendibMsgTableModel->setHeaderData(1, Qt::Horizontal, tr("Data Type"));

serendibMsgProxyModel->setSourceModel(serendibMsgTableModel);
serendibMsgView->setModel(serendibMsgProxyModel);

「serendibMsgTableModel」はでありQSqlQueryModel、「serendibMsgProxyModel」はカスタマイズされてQSortFilterProxyModelいます。「serendibMsgView」は、「QTableViewデータ型」列に表示するアイコンが必要です。

これがあなたの答えに役立つことを願っています。

4

2 に答える 2

7

あなたはすでに答えを選んでいるのを見ましたが、あなたはQtを学んでいるので、いくつか追加します。

優れたQtドキュメントを見て、モデルでこれを上書きすることをお勧めします。

QVariant QSqlTableModel::data ( 
            const QModelIndex & index,
            int role = Qt::DisplayRole ) const   [virtual]

さまざまな役割があります(int role = Qt :: DisplayRole):

enum Qt :: ItemDataRole:モデル内の各アイテムには、それぞれ独自の役割を持つ一連のデータ要素が関連付けられています。役割は、必要なデータのタイプをモデルに示すためにビューによって使用されます。カスタムモデルは、これらのタイプのデータを返す必要があります。

Qt :: DecorationRole:アイコンの形で装飾としてレンダリングされるデータ。(QColor、QIconまたはQpixmap)

したがって、実行する必要があるのは、DisplayRoleのdata()関数でQIconまたはQPixmapを返すことです。

より適切かもしれない別のアプローチは、デリゲートを利用することです:例えばColorListEditor

于 2011-04-04T12:58:43.623 に答える
6

アイテムのDecorationRoleを必要なQPixmapに設定すると、機能するはずです。

編集:

アイコンはデータ型列の値に依存していると思います。

int rowCount = serendibMsgTableModel->rowCount();

for(int row = 0; row < rowCount; row++)
{
    QModelIndex index = serendibMsgTableModel->index(row, 1);
    QVariant value = serendibMsgTableModel->data(index);
    static QPixmap s_invalidIcon(PATH_TO_INVALID_ICON);
    static QPixmap s_type1Icon(PATH_TO_TYPE1_ICON);
    static QPixmap s_type2Icon(PATH_TO_TYPE2_ICON);

    QPixmap icon(s_invalidIcon);

    if(value.toString() == "type1")
    {
        icon = s_type1Icon;
    }
    else if(value.toString() == "type2")
    {
        icon = s_type2Icon;
    }
    serendibMsgTableModel->setData(index, icon, Qt::DecorationRole);
}

このようなものが機能するはずです。setModelの前に値を設定します。

私はそれをテストしていませんが、あなたはこれからアイデアを得る必要があると思います。

于 2011-04-04T06:50:58.013 に答える