crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Изменение высоты и ширины ячеек.
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 4.2.2010, 17:59
  По моему Antrix, уже решил проблему. почти год назад
Кристина Дата 4.2.2010, 15:28
 
Цитата(Antrix @ 14.3.2009, 18:38) *
Есть табличка с 2 столбцами и 64к строк. Нужно задать высоту ячеек, например, на 17, ширину на 34.
Пробывал делать так:
QTableView* t = new QTableView();
t->resizeColumnsToContents();
//или так:
for (int i = 0; i < N; i++) //N = 64000
t->horizontalHeader()->resizeSection(i, 17);
Оба варианта слишком медлительны. Как можно ускорить этот процес? Текс во всех ячейках одинаковой длины - 4 символа.


к примеру делаешь наследника от делегата
и переопределяешь в неи метод sizeHint
к примеру так
virtual QSize sizeHint( const QStyleOptionViewItem &option, const QModelIndex &index ) const
    {
        return QSize( 63, 63 );
    }
Litkevich Yuriy Дата 15.3.2009, 20:23
  см. слоты у QTableView там четыре штуки, два для строк, два для столбцов
anonymous Дата 15.3.2009, 20:14
 
Цитата(Litkevich Yuriy @ 15.3.2009, 16:30) *
QString str = "first line\nsecond line";
и получал двестрочки.


Скажите, а есть ли какой-нибудь параметр чтобы ячейки сами расширялись показываю что в них написано, без задания конкретных значений ширины???
Интересует именно расширение вниз по ширине.
Litkevich Yuriy Дата 15.3.2009, 16:30
 
Цитата(Гость_anonymous_* @ 15.3.2009, 18:26) *
можно было помещать многострочный текст??
Или чтобы он хотя бы отображался таковым??
я делал так:
QString str = "first line\nsecond line";
и получал двестрочки.
BRE Дата 15.3.2009, 15:40
 
Цитата(anonymous @ 15.3.2009, 15:26) *
Околотемный вопрос, скажите а можно ли сделать так чтобы в ячейке QTableWidget можно было помещать многострочный текст??
Или чтобы он хотя бы отображался таковым??

Делегаты наше Фсе! Переопределяй paint и рисуй хоть по диагонале. :)
anonymous Дата 15.3.2009, 15:26
  Околотемный вопрос, скажите а можно ли сделать так чтобы в ячейке QTableWidget можно было помещать многострочный текст??
Или чтобы он хотя бы отображался таковым??
Antrix Дата 15.3.2009, 14:57
  BRE спасибо за пример :clapping: . Но все-равно очень долго получается изминение размеров ячеек.
По всей видимости, единственый путь, делать так.
QTableView* t = new QTableView();
t->horizontalHeader()->setDefaultSectionSize(34);
t->verticalHeader()->setDefaultSectionSize(17);
Работает многновенно.
BRE Дата 14.3.2009, 22:18
 
Цитата(BRE @ 14.3.2009, 21:19) *
Поглядим.


main.cpp

#include <QApplication>
#include <QStandardItemModel>
#include <QTableView>
#include <QHeaderView>
#include "CItemDelegate.h"

int main( int argc, char *argv[] )
{
        QApplication app( argc, argv );

        QStandardItemModel model( 4, 2 );
        for( int row = 0; row < 4; ++row )
        {
                for( int column = 0; column < 2; ++column )
                {
                        QModelIndex index = model.index( row, column, QModelIndex() );
                        model.setData( index, QVariant( (row+1) * (column+1) ) );
                }
        }

        QTableView tableView;

        CItemDelegate delegate( &tableView );
        tableView.setItemDelegate( &delegate );

        tableView.setModel( &model );
        tableView.resizeColumnsToContents();
        tableView.resizeRowsToContents();

        tableView.show();

        return app.exec();
}

Stanislaus Дата 14.3.2009, 21:59
  Нужно переопределить класс модели, которую ты используешь в QTableView. А именно, переопределить метод QAbstractItemModel::data(), для роли Qt::SizeHint. Так же можно попробовать воспользоваться setData(), но не думаю, что этот вариан будет очень быстрым.
После популяции view, нужно выполнить view->resizeRowsToContents() и view->resizeColumnsToContents(), чтобы был учтен size hint.
Где-то тут в статьях был очень хороший мануал, как эффективно использовать Model/View фреймворк. Не могу найти, к сожалению.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 8.4.2020, 17:54