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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: центрирование отображения папок в Listview  (Прочитано 14722 раз)
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« : Февраль 18, 2015, 20:07 »

Здравствуйте есть qfilesystemmodel представленный в Qlistview
проблема в следующем мне нужно как бы выровнять папки

мой виджет скомпонован по сетке те он может расширяться...

но мне нужно чтобы как бы все папки были по сетке чтоли... Те каждая под каждой....
как примерно тут



вопрос как это сделать?
« Последнее редактирование: Февраль 18, 2015, 20:10 от koldun90 » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Февраль 18, 2015, 20:23 »

попробуй возвращать фиксированную ширину для Qt::SizeHintRole из data() модели. если не поможет, то наверное без кастомного делегата никак.
Записан

Изучением 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
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #2 : Февраль 18, 2015, 23:15 »

я делаю так вот
Код:
if (role==Qt::SizeHintRole)
{
   return QSize(60,60);
}

получается такая картина все вроде бы устраивает...
НО как бы мне еще нужно чтобы имена файлов и папок(если они длинные) переносились на другую сторону(на вторую сторону чтоб они прям полностью отображались...
как в примере приведенном в начале темы на второй картинке.... там допустим отображается название папки полностью (SYSTEM VOLUME INFORMATION) переносится на след строку если сжимаю.... ну я думаю вы поняли)
« Последнее редактирование: Февраль 18, 2015, 23:19 от koldun90 » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Февраль 18, 2015, 23:55 »

делегат свой писать, по-другому никак. посмотри исходниках как дефолтный делегат отрисовывает айтемы qfilesystemmodel.
Записан

Изучением 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
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #4 : Февраль 19, 2015, 05:59 »

дефолтный делегат это это?
Код:
void QItemDelegate::paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const   [virtual]
вообщем что нужно переопределять?
и у меня нет исходников....
объясните подробнее.....
« Последнее редактирование: Февраль 19, 2015, 06:26 от koldun90 » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Февраль 19, 2015, 14:48 »

ну так скачай их, раз нету.

открой документацию QStyledItemDelegate и почитай, ну и примеры посмотри.
Записан

Изучением 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
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #6 : Февраль 19, 2015, 15:55 »

я в английском не очень силен могли бы вы подсказать  в сторону какого метода в классе QStyledItemDelegate нужно "копать"?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #7 : Февраль 19, 2015, 17:01 »

открой русский перевод и почитай раздел наследования от QStyledItemDelegate. как минимум тебе нужно будет писать свою отрисовку в paint().
Записан

Изучением 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
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #8 : Февраль 19, 2015, 20:52 »

открой русский перевод и почитай раздел наследования от QStyledItemDelegate. как минимум тебе нужно будет писать свою отрисовку в paint().
странно русского перевода не нашел этого класса) http://doc.crossplatform.ru/
если вы знаете можно ссылку...
Записан
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #9 : Февраль 19, 2015, 20:56 »

вот нашел исходник вроде бы
https://qt.gitorious.org/qt/webkit/source/435bbd4be73768f617e4a4083a345d1d8d62daa3:src/gui/itemviews/qstyleditemdelegate.cpp
Записан
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #10 : Февраль 19, 2015, 21:03 »

Код:
void QStyledItemDelegate::paint(QPainter *painter,
        const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    Q_ASSERT(index.isValid());
 
    QStyleOptionViewItemV4 opt = option;
    initStyleOption(&opt, index);
 
    const QWidget *widget = QStyledItemDelegatePrivate::widget(option);
    QStyle *style = widget ? widget->style() : QApplication::style();
    style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, widget);
}
и что тут отвечает за надпись айтема ( в моем случае имени файла+ или папки)?
« Последнее редактирование: Февраль 19, 2015, 21:06 от koldun90 » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #11 : Февраль 20, 2015, 00:32 »

открой русский перевод и почитай раздел наследования от QStyledItemDelegate. как минимум тебе нужно будет писать свою отрисовку в paint().
странно русского перевода не нашел этого класса) http://doc.crossplatform.ru/
если вы знаете можно ссылку...

не повезло Улыбающийся
Код:
void QStyledItemDelegate::paint(QPainter *painter,
        const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    Q_ASSERT(index.isValid());
 
    QStyleOptionViewItemV4 opt = option;
    initStyleOption(&opt, index);
 
    const QWidget *widget = QStyledItemDelegatePrivate::widget(option);
    QStyle *style = widget ? widget->style() : QApplication::style();
    style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, widget);
}
и что тут отвечает за надпись айтема ( в моем случае имени файла+ или папки)?
значит надо копать глубже, в QStyle::drawControl
Записан

Изучением 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
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #12 : Февраль 20, 2015, 18:48 »

извините а определение метода
Код:
QStyle::drawControl
вообще не нашел
вот прилагаю сурс qstyle.cpp
что делать дальше?
« Последнее редактирование: Февраль 20, 2015, 19:01 от koldun90 » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #13 : Февраль 20, 2015, 20:17 »

это чистый виртуальный метод, реализацию надо искать в подклассах.

уже б давно написал свою отрисовку — там намалевать-то иконку (стандартную судя по всему) и многострочный текст.
Записан

Изучением 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
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #14 : Февраль 20, 2015, 21:29 »

где писать ....
мы даже не нашли какой метод переопределять надо...
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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