QTableView с иконками в строках - PullRequest
5 голосов
/ 04 апреля 2011

У меня есть 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 Мне нужно, чтобы значки отображались в столбце Тип данных.

Надеюсь, это поможет вам ответить.

Ответы [ 2 ]

5 голосов
/ 04 апреля 2011

Установите украшениеRole ваших предметов на QPixmap, который вы хотите, и он должен работать.

edit:

Я полагаю, что значок зависит от значения встолбец типа данных.

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.

Я не проверял это, но я думаю, что вы должны понять это.

4 голосов
/ 04 апреля 2011

Я видел, что вы уже выбрали ответ, но так как вы изучаете 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)

Таким образом, вам нужно вернуть QIcon или QPixmap в функцию data () для DisplayRole.

Другой подход, который может быть более подходящим, состоит в использовании делегатов : например, ColorListEditor

...