Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: hordi1 от Мая 24, 2011, 18:57



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

ХЕЛП плиз.


Qt-4.7.2


Название: Re: Как задать изменяемую высоты row для QTableView?
Отправлено: blood_shadow от Мая 24, 2011, 23:12
Задолбался честно говоря... Установить высоту для каждой строки можно через verticalHeader()->resizeSection(...), но после сортировки строки все меняются, а размеры строк остаются прежние. ПРобовал переопределять sizeHint для QItemDelegate (verticalHeader()->setItemDelegate(new ...)) - не вызывается вообще, пробовал переопределить QTableView::sizeHintForRow - не вызывается.

ХЕЛП плиз.


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


Название: Re: Как задать изменяемую высоты row для QTableView?
Отправлено: hordi1 от Мая 25, 2011, 11:41
а что мешает прицепить к сортировке сигнал, который будет вызывать sizeHintForRow?
или в крайнем случае sizeHintForRow к dataChanged(index, index) сигнала модели

Ну так это пахнет извратом, а вдруг есть правильный и красивый метод?


Название: Re: Как задать изменяемую высоты row для QTableView?
Отправлено: blood_shadow от Мая 25, 2011, 13:12
другого незнаю, с такой проблемой не стыкался
мне кажется что прицепить сигнал о начале сортировки тут ничего страшного нет..
если покрасивее надо в сторону делегата копать, посмотри:
Код:
QSize QStyledItemDelegate::sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & index ) const 


Название: Re: Как задать изменяемую высоты row для QTableView?
Отправлено: Kunashir от Июня 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);
        }
//...
все прекрасно масштабируется


Название: Re: Как задать изменяемую высоты row для QTableView?
Отправлено: hordi1 от Июня 01, 2011, 17:04
Спасибо.

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