Russian Qt Forum
Ноябрь 23, 2024, 10:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: DecorationRole в TableView  (Прочитано 6399 раз)
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();
}

Что может быть не так.. Ну нет иконки в таблице и все...  Непонимающий
« Последнее редактирование: Июль 24, 2012, 15:53 от Danila_Bagrofff » Записан
mutineer
Гость
« Ответ #1 : Июль 24, 2012, 15:53 »

QTableView вообще запрашивает из модели данные по этой роли?
Записан
Danila_Bagrofff
Гость
« Ответ #2 : Июль 24, 2012, 15:54 »

Да, дебагер туда заскакивает, но в таблице на экране ничего нет...
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Июль 24, 2012, 15:56 »

убери DisplayRole
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Danila_Bagrofff
Гость
« Ответ #4 : Июль 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 не выпадает - то есть проблем бы быть не должно.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Июль 24, 2012, 16:06 »

а, я кажется понял Улыбающийся QApplication::applicationDirPath() возвращает путь без слэша, так что пиши QApplication::applicationDirPath() + "/1.png"
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Danila_Bagrofff
Гость
« Ответ #6 : Июль 24, 2012, 16:10 »

неа, я ваще ему прямой путь писал с:\Temp\1.png и никатит =(
Записан
Danila_Bagrofff
Гость
« Ответ #7 : Июль 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;
     }
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #8 : Июль 24, 2012, 16:21 »

только щас понял, что надо возвращать QPixmap, а не QIcon.

хм, нет, документация говорит что можно и QIcon. но я только что пробовал в тестовом проекте через QPixmap – работало.
« Последнее редактирование: Июль 24, 2012, 16:23 от kambala » Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Danila_Bagrofff
Гость
« Ответ #9 : Июль 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)

Пиксмап не помог =(
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #10 : Июль 24, 2012, 16:29 »

значит пришло время для выкладывания тестового проекта, в котором воспроизводится ошибка
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Danila_Bagrofff
Гость
« Ответ #11 : Июль 24, 2012, 16:49 »

Все, понял. Картинка создавалась не как png. У нее кривой заголовок. Соответсвенно он ее не может распознать как тип png корректно - потому и не отображает.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.117 секунд. Запросов: 22.