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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как задать изменяемую высоты row для QTableView?  (Прочитано 3702 раз)
hordi1
Гость
« : Мая 24, 2011, 18:57 »

Задолбался честно говоря... Установить высоту для каждой строки можно через verticalHeader()->resizeSection(...), но после сортировки строки все меняются, а размеры строк остаются прежние. ПРобовал переопределять sizeHint для QItemDelegate (verticalHeader()->setItemDelegate(new ...)) - не вызывается вообще, пробовал переопределить QTableView::sizeHintForRow - не вызывается.

ХЕЛП плиз.


Qt-4.7.2
« Последнее редактирование: Мая 24, 2011, 19:03 от hordi1 » Записан
blood_shadow
Гость
« Ответ #1 : Мая 24, 2011, 23:12 »

Задолбался честно говоря... Установить высоту для каждой строки можно через verticalHeader()->resizeSection(...), но после сортировки строки все меняются, а размеры строк остаются прежние. ПРобовал переопределять sizeHint для QItemDelegate (verticalHeader()->setItemDelegate(new ...)) - не вызывается вообще, пробовал переопределить QTableView::sizeHintForRow - не вызывается.

ХЕЛП плиз.


Qt-4.7.2
а что мешает прицепить к сортировке сигнал, который будет вызывать sizeHintForRow?
или в крайнем случае sizeHintForRow к dataChanged(index, index) сигнала модели
Записан
hordi1
Гость
« Ответ #2 : Мая 25, 2011, 11:41 »

а что мешает прицепить к сортировке сигнал, который будет вызывать sizeHintForRow?
или в крайнем случае sizeHintForRow к dataChanged(index, index) сигнала модели

Ну так это пахнет извратом, а вдруг есть правильный и красивый метод?
Записан
blood_shadow
Гость
« Ответ #3 : Мая 25, 2011, 13:12 »

другого незнаю, с такой проблемой не стыкался
мне кажется что прицепить сигнал о начале сортировки тут ничего страшного нет..
если покрасивее надо в сторону делегата копать, посмотри:
Код:
QSize QStyledItemDelegate::sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & index ) const 
Записан
Kunashir
Гость
« Ответ #4 : Июня 01, 2011, 16:45 »

Я делал следующим образом
Код:
 
QVariant CatalogTableModel::data(const QModelIndex &index, int role) const
///...
if (role == Qt::SizeHintRole)
    {
        //Рассчет наилучшего размера
        //макс длина 200, если больше, то переносим
       QFont f ("Helvetica");
       QFontMetrics fm (f);
        if (index.column() == 0 || index.column() == 2
               || index.column() == 3)
        {
            int w = fm.width (listItem->at(index.row())->getData(index.column()).toString());
            int h = 14;
            if ( (w/200) > 1)
            {
                h = h*(w/200);
                w = 200;
            }
           return QSize (w, h);
        }
//...
все прекрасно масштабируется
Записан
hordi1
Гость
« Ответ #5 : Июня 01, 2011, 17:04 »

Спасибо.

Я в итоге нашел как это делать - если сделать verticalHeader()->setResizeMode(QHeaderView::ResizeToContents), то в итоге начинает вызываться виртуальная функция  QTableView::sizeHintForRow( int row )const и через нее можно менять.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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