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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблемы с отображением подписей в QListView  (Прочитано 6620 раз)
BagmutA
Гость
« : Июль 18, 2011, 13:13 »

Использую QListView для отображения изображений.
Если поставить в свойствах
Код
C++ (Qt)
QListView setViewMode(QListView::IconMode)
, то отображение большего числа картинок происходит достаточно долго.
Если же поставить в свойствах QListView
Код
C++ (Qt)
setViewMode(QListView::ListMode)
, отображение происходит быстро (картинки отображаются правильно), но подписи к ним, которые я добавляю в модель для даной картинки:
Код
C++ (Qt)
myModel->setData(index, listFiles.at(i), Qt::DisplayRole);
отображаются справа от картинки а не снизу, как я хочу.
Как заставить QListView отображать эти подписи снизу?
Записан
twp
Гость
« Ответ #1 : Июль 18, 2011, 14:58 »

можно попробовать так
Код:
myModel->setData(index, Qt::AlignBottom, Qt::TextAlignmentRole);
Записан
BagmutA
Гость
« Ответ #2 : Июль 18, 2011, 16:31 »

В режиме ListMode отображает: -- вложение 1
Если использовать
Код
C++ (Qt)
myModel->setData(index, Qt::AlignBottom, Qt::TextAlignmentRole);
, то: -- вложение 2
А надо чтобы было: -- вложение 3.
Записан
twp
Гость
« Ответ #3 : Июль 18, 2011, 18:32 »

значит не получится сдлеать стандартными методами, нужно свой делегат делать в котором отрисовывать контент должным образом
Записан
BagmutA
Гость
« Ответ #4 : Июль 18, 2011, 22:44 »

Я унаследовал QItemDelegate:
Код
C++ (Qt)
class SimpleDelegate : public QItemDelegate
{
public:
   SimpleDelegate(QObject* pobj = 0) : QItemDelegate(pobj)
   {
   }
 
   void paint(QPainter*                   pPainter,
              const QStyleOptionViewItem& option,
              const QModelIndex&          index
             ) const
   {
   }
};
Для QListView умтановил делегата:
    
Код
C++ (Qt)
PreviewList->setItemDelegate(new SimpleDelegate(&listView));
Как мне теперь нарисовать картинку и подпись под ней?
Если в paint рисовать:
Код
C++ (Qt)
pPainter->drawPixmap(option.rect, QPixmap("myPixmap"));
то картинки рисуются обрезаными (option.rect меньше картинки и gridSize или iconSize)
И вообще как изменить option.rect?
« Последнее редактирование: Июль 18, 2011, 22:49 от BagmutA » Записан
twp
Гость
« Ответ #5 : Июль 19, 2011, 11:14 »

Нужно переопределить в своем делегате метод QItemDelegate::sizeHint() и возвращать нужный размер для индекса
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Июль 19, 2011, 11:35 »

Код
C++ (Qt)
pPainter->drawPixmap(option.rect, QPixmap("myPixmap"));
Мде, при каждой отрисовке будет создаваться, рисоваться и удаляться пиксмап Непонимающий
Чем не устроил QAbstractItemModel::setData()?
Наверное для начала не мешало бы изучить Программирование модель/представление.
Записан

Qt 5.11/4.8.7 (X11/Win)
BagmutA
Гость
« Ответ #7 : Июль 19, 2011, 12:32 »

Код
C++ (Qt)
pPainter->drawPixmap(option.rect, QPixmap("myPixmap"));
Мде, при каждой отрисовке будет создаваться, рисоваться и удаляться пиксмап Непонимающий
Чем не устроил QAbstractItemModel::setData()?
Наверное для начала не мешало бы изучить Программирование модель/представление.
Да я бы не против. Я собственно так и делал:
Код
C++ (Qt)
myModel->setData(index, "name", Qt::DisplayRole);
myModel->setData(index, QIcon("MyIco"), Qt::DecorationRole);
Так вот проблема в том, как в режиме QListView::ListMode заставить текст заданый
Код
C++ (Qt)
myModel->setData(index, "name", Qt::DisplayRole)
отрисовыватся под иконкой а не справа?
Записан
BagmutA
Гость
« Ответ #8 : Июль 19, 2011, 12:37 »

Нужно переопределить в своем делегате метод QItemDelegate::sizeHint() и возвращать нужный размер для индекса
То есть делать вот так:
Код
C++ (Qt)
QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index)
{
return QSize(MainWindow::icoWidth, MainWindow::icoHeight);
}
Но на сколько я понимаю необходимо QSize возвращаемый этой функцией передать QStyleOptionViewItem& option. А как это сделать?
Записан
twp
Гость
« Ответ #9 : Июль 19, 2011, 13:50 »

по идее этого достаточно. Единственное что в методе sizeHint нужно еще учесть размер для текста
Записан
BagmutA
Гость
« Ответ #10 : Июль 19, 2011, 14:06 »

по идее этого достаточно. Единственное что в методе sizeHint нужно еще учесть размер для текста
Да все работает, большее спасибо(у меня была маленькая ошибка).
Записан
BagmutA
Гость
« Ответ #11 : Июль 19, 2011, 14:10 »

Код
C++ (Qt)
pPainter->drawPixmap(option.rect, QPixmap("myPixmap"));
Мде, при каждой отрисовке будет создаваться, рисоваться и удаляться пиксмап Непонимающий
Чем не устроил QAbstractItemModel::setData()?
Наверное для начала не мешало бы изучить Программирование модель/представление.
А как это происходит в моделе/представление?
При первом отображении создается массив пиксмапов и они потом отрисовываются?
Записан
twp
Гость
« Ответ #12 : Июль 19, 2011, 21:23 »

При первом отображении создается массив пиксмапов и они потом отрисовываются?
в смысле? пиксмапы как и все остальные данные хранятся в модели
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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