Отображение изображения из QAbstractTableModel - PullRequest
6 голосов
/ 03 ноября 2011

Я пытаюсь отобразить изображение с QAbstractTableModel.Я попытался вернуть QPixmap как QVariant из data(), но он только производит пустые ячейки, когда я ожидал, что каждая ячейка во втором столбце будет иметь черный квадрат 20x20.

Это мойкод на данный момент:

QVariant MySqlTableModel::data(const QModelIndex &idx, int role = Qt::DisplayRole) const
{
    if (role == Qt::DisplayRole && idx.column() == 1) {
        QPixmap pixmap(20,20);
        QColor black(0,0,0);
        pixmap.fill(black);
        return pixmap;
    }

    return QSqlTableModel::data(idx, role);
}

1 Ответ

5 голосов
/ 03 ноября 2011

Только QVariant s, которые могут быть преобразованы в строку, могут быть возвращены для роли Qt::DisplayRole со стандартным делегатом.

Вы можете показать изображение, вернув его для роли Qt::DecorationRole

QVariant MySqlTableModel::data(const QModelIndex &idx, int role = Qt::DisplayRole) const
{
    if (idx.column() == 1) {
        if (role == Qt::DecorationRole) {
            QPixmap pixmap(20,20);
            QColor black(0,0,0);
            pixmap.fill(black);
            return pixmap;
        } else if (role == Qt::DisplayRole) {
            // For Qt::DisplayRole return an empty string, otherwise
            // you will have *both* text and image displayed.
            return "";
        }
    }

    return QSqlTableModel::data(idx, role);
}

Или напишите своего собственного делегата, чтобы сделать картину самостоятельно.См. документацию QStyledItemDelegate для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...