Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Danila_Bagrofff от Июль 24, 2012, 15:50



Название: DecorationRole в TableView
Отправлено: Danila_Bagrofff от Июль 24, 2012, 15:50
Подскажите, что нужно указать, или наоборот, что не нужно указывать, чтобы иконки отображались в таблице.

Почему-то вообще нигде никак не хотят отображаться иконки.

В модели уже напрямую прописал имя картинки и указал - все ячейки. И все равно нигде не отображается иконка.

Код:
QVariant AttributesTableModel::data(const QModelIndex &index, int role) const
{
     if(!index.isValid()) return QVariant();
     if(qLstAttributes->count()==0) return QVariant();

     if(role == Qt::DisplayRole)
      {
             return qLstAttributes->at(index.row()).at(index.column());
     }

     if (role == Qt::DecorationRole)
     {
         return QIcon(QApplication::applicationDirPath() + "1.png");//&qIcnOk; //ЗДЕСЬ ХОЧУ ОТОБРАЖАТЬ ИКОНКИ
     }

     if (role == Qt::TextAlignmentRole)
     {
         return QVariant(Qt::AlignVCenter | Qt::AlignLeft);
     }

     if (role == Qt::BackgroundColorRole)
     {
        if(index.column()==0)
                return QColor(210, 210, 210);
     }

     return QVariant();
}

Что может быть не так.. Ну нет иконки в таблице и все...  ???


Название: Re: DecorationRole в TableView
Отправлено: mutineer от Июль 24, 2012, 15:53
QTableView вообще запрашивает из модели данные по этой роли?


Название: Re: DecorationRole в TableView
Отправлено: Danila_Bagrofff от Июль 24, 2012, 15:54
Да, дебагер туда заскакивает, но в таблице на экране ничего нет...


Название: Re: DecorationRole в TableView
Отправлено: kambala от Июль 24, 2012, 15:56
убери DisplayRole


Название: Re: DecorationRole в TableView
Отправлено: Danila_Bagrofff от Июль 24, 2012, 16:02
убрал, не поможает.
Да и не должно бы мешать - все таки разные они по тематике.

Поправил у себя код на такой:

Код:
if (role == Qt::DecorationRole)
     {
         QIcon i;// = new QIcon(QApplication::applicationDirPath() + "1.png");
         i.addFile(QApplication::applicationDirPath() + "1.png");
         if(i.isNull())
             return QVariant();
         return i;//&qIcnOk;
     }

isNull не выпадает - то есть проблем бы быть не должно.


Название: Re: DecorationRole в TableView
Отправлено: kambala от Июль 24, 2012, 16:06
а, я кажется понял :) QApplication::applicationDirPath() возвращает путь без слэша, так что пиши QApplication::applicationDirPath() + "/1.png"


Название: Re: DecorationRole в TableView
Отправлено: Danila_Bagrofff от Июль 24, 2012, 16:10
неа, я ваще ему прямой путь писал с:\Temp\1.png и никатит =(


Название: Re: DecorationRole в TableView
Отправлено: Danila_Bagrofff от Июль 24, 2012, 16:19
Сделал так, и уже хотя бы пустые поля под картинки появились:
Код:
if (role == Qt::DecorationRole)
     {
         QIcon i;// = new QIcon(QApplication::applicationDirPath() + "1.png");
         QString path = QApplication::applicationDirPath() + "/1.png";
         i.addFile(path, QSize(20,20), QIcon::Active, QIcon::On);
         //i.actualSize(QSize(10,10));
         if(i.isNull())
             return QVariant();
         return i;//&qIcnOk;
         return icon;//&qIcnOk;
     }


Название: Re: DecorationRole в TableView
Отправлено: kambala от Июль 24, 2012, 16:21
только щас понял, что надо возвращать QPixmap, а не QIcon.

хм, нет, документация говорит что можно и QIcon. но я только что пробовал в тестовом проекте через QPixmap – работало.


Название: Re: DecorationRole в TableView
Отправлено: Danila_Bagrofff от Июль 24, 2012, 16:26
Да вроде как и с иконкой должно бы:

Цитировать
Qt::DecorationRole   1   The data to be rendered as a decoration in the form of an icon. (QColor, QIcon or QPixmap)

Пиксмап не помог =(


Название: Re: DecorationRole в TableView
Отправлено: kambala от Июль 24, 2012, 16:29
значит пришло время для выкладывания тестового проекта, в котором воспроизводится ошибка


Название: Re: DecorationRole в TableView
Отправлено: Danila_Bagrofff от Июль 24, 2012, 16:49
Все, понял. Картинка создавалась не как png. У нее кривой заголовок. Соответсвенно он ее не может распознать как тип png корректно - потому и не отображает.