Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Изменение высоты и ширины ячеек.
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
Antrix
Есть табличка с 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 символа.
Litkevich Yuriy
Цитата(Antrix @ 14.3.2009, 21:38) *
Оба варианта слишком медлительны. Как можно ускорить этот процес?
скорее всего это связано с перерисовкой, попробуй обернуть большие изменения в
setUpdatesEnabled(...)
BRE
Цитата(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.
Antrix
setUpdatesEnabled(...) - непомогло.
Решил проблемму так:
QTableView* t = new QTableView();
t->horizontalHeader()->setDefaultSectionSize(34);
t->verticalHeader()->setDefaultSectionSize(17);
Пробыл сделать как предложил BRE. Не получилось. Переопределил sizeHint, но этот метод даже не вызывается. Нашел решение это й же проблеммы, но все равно не работает.
Вот описание решения: http://lists.trolltech.com/qt-interest/200...ead01062-0.html
Пробую пример не пашет.
Что я делаю не так? Уж очень хочется найти ответ :rolleyes:

Вот исходник.
BRE
Цитата(Antrix @ 14.3.2009, 21:14) *
Что я делаю не так? Уж очень хочется найти ответ :rolleyes:

Поглядим.
Stanislaus
Нужно переопределить класс модели, которую ты используешь в QTableView. А именно, переопределить метод QAbstractItemModel::data(), для роли Qt::SizeHint. Так же можно попробовать воспользоваться setData(), но не думаю, что этот вариан будет очень быстрым.
После популяции view, нужно выполнить view->resizeRowsToContents() и view->resizeColumnsToContents(), чтобы был учтен size hint.
Где-то тут в статьях был очень хороший мануал, как эффективно использовать Model/View фреймворк. Не могу найти, к сожалению.
BRE
Цитата(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();
}

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

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


Скажите, а есть ли какой-нибудь параметр чтобы ячейки сами расширялись показываю что в них написано, без задания конкретных значений ширины???
Интересует именно расширение вниз по ширине.
Litkevich Yuriy
см. слоты у QTableView там четыре штуки, два для строк, два для столбцов
Кристина
Цитата(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
По моему Antrix, уже решил проблему. почти год назад
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.