Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Перенос из QVariant в QImage


Автор: olegkuzn 30.6.2014, 08:45
здраствуйте.
Подскажите как извлечь картину QImage из переменной QVariant.
Необходимо пенести данные из модели в отображение

BarleyModel унаследована от QAbstractItemModel
BarleyView   унасленована  от QAbstractItemView


Код

/*virtual*/
QVariant BarleyModel::data(const QModelIndex &index, int role) const
{
    if( role == Qt::DisplayRole)
    {
        qint8 pos = index.row() * m_nNumRows + index.column();
        return QVariant(m_pnData[pos]);
    }

    if( role == Qt::DecorationRole)
    {
        QImage imgTemp = m_Image.copy(index.row() * m_szBarley.height(),
                                      index.column() * m_szBarley.width(),
                                      m_szBarley.width(),
                                      m_szBarley.height()
                                      );    // выдедляем из основной картинки "подкартинку"

        return QVariant(imgTemp); // QVariant(QImage& img) - такого конструктора нет но это проходит
    }

    return QVariant();
}



Код

/*virtual*/
void BarleyView::paintEvent(QPaintEvent */*event*/)
{
    QPainter painter(viewport());

    int nPosX = 0;
    int nPosY = 0;

    for(int x = 0; x < model()->rowCount(); x++)
    {
        for(int y = 0; y < model()->columnCount(); y++)
        {
            QModelIndex idxModel = model()->index(x, y);
            QVariant varTemp = model()->data(idxModel, Qt::DecorationRole);
            QImage imgTemp;
            // Здесь должен быть код переноса картинки из QVariant в QImage
            
            painter.drawImage(nPosX, nPosY, imgTemp);

            nPosX+=m_szBarley.width();
        }
        nPosY+=m_szBarley.height();
    }
}

Автор: borisbn 30.6.2014, 09:44
Цитата
Because QVariant is part of the QtCore library, it cannot provide conversion functions to data types defined in QtGui, such as QColor, QImage, and QPixmap. In other words, there is no toColor() function. Instead, you can use the QVariant::value() or the qVariantValue() template function. For example:
 QVariant variant;
 ...
 QColor color = variant.value<QColor>();
The inverse conversion (e.g., from QColor to QVariant) is automatic for all data types supported by QVariant, including GUI-related types:
 QColor color = palette().background().color();
 QVariant variant = color;

Автор: olegkuzn 30.6.2014, 10:56
Спасибо borisbn.
Следующий раз постараюсь прочитать весь "Help" по теме, а не только просматривать функции члены класса.

Добавлено через 1 минуту и 7 секунд
Спасибо borisbn.
Следующий раз постараюсь прочитать весь "Help" по теме, а не только просматривать функции члены класса.

Добавлено через 1 минуту и 13 секунд
Спасибо borisbn.
Следующий раз постараюсь прочитать весь "Help" по теме, а не только просматривать функции члены класса.

Добавлено через 1 минуту и 16 секунд
Спасибо borisbn.
Следующий раз постараюсь прочитать весь "Help" по теме, а не только просматривать функции члены класса.

Автор: olegkuzn 30.6.2014, 11:29
Спасибо borisbn.
Следующий раз постараюсь прочитать весь "Help" по теме, а не только просматривать функции члены класса.

Автор: borisbn 30.6.2014, 12:42
Бог не дурак, полюбит и пятак ?  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)