LINUX.ORG.RU

Возможно ли быстро залить содержимое QTableView 2^32 ячейками?


0

0

Пишу класс - редактор памяти (эмулятор). Для этого, создал новую модель
(наследник от QAbstractTableModel), rowCount() возвращает 3, columnCount() -
0xAAAAAAA. Задал созданную модель экземпляру QTableView. Очень долго открывается
такая модель (если честно я не дождался пока откроется). Хотя ожидал что ячейки
будут создаваться/удаляться динамически при прокручивании таблицы, а они
получается создаются статически за раз 2^32 экземплярчиков....

Кто-нить может подсказать какую-то идею по сабжу?

Ээээ. Может стоит поменять вертикаль и горизонталь? Дохренища столбцов обычно бывает редко, обычно используют куча _строчек_ и несколько столбоцев. Вы уверены что вам нужно именно так как вы написали?

theos ★★★
()
Ответ на: комментарий от anterior

Странно, вообще-то не должно тормозить. Вьюха создает только видимые в данный момент ячейки. Может создание модели тормозит?

panter_dsd ★★★★
()
Ответ на: комментарий от panter_dsd

Кажется объект тормозов найден, им оказалась совсем таки с виду безобидная функция QTableView:: verticalHeader()->resizeSections(...). Вот если её вызывать тогда и начинаются проблемы.

Вопрос, а как иначе то быть? Мне нужны фиксированные размеры ячеек

anterior
() автор топика
Ответ на: комментарий от LestorN

О, ужас.... боюсь на это угрохается куча времени :(

anterior
() автор топика

А если взять QTableView небольшого размера и крутить данные / менять подписи руками? Может и костыль, но всё же.

Deleted
()
Ответ на: комментарий от Deleted

Да так собственно и хотел делать, просто на деле необходимо адресовать 2^64 ячеек, и крутить их по-странично по 2^32. Просто не хочется ещё более мельчить...

anterior
() автор топика

я конечно зануда, но 2^32 это МНОГО и если появилось желание сделать такую таблицу, то что-то надо менять в консерватории. честно

Pi ★★★★★
()
Ответ на: комментарий от anterior

ну ты даёшь, конечно ресайз приводит к перерисовке огромного числа ячеек

используй void QHeaderView::setResizeMode ( int logicalIndex, ResizeMode mode ), задай QHeaderView::Fixed, а размер задай через void QHeaderView::setDefaultSectionSize ( int size ). И так для всех, в итоге будет одинаковый размер у всех и изменять его нельзя будет.

PayableOnDeath
()
Ответ на: комментарий от PayableOnDeath

Может я чего-то недопонял...

Вариант 1:
------------------------
MemView::MemView(QWidget* parent)
: QTableView(parent)
{
setModel(new MyModel());
horizontalHeader()->setResizeMode(0, QHeaderView::Fixed);
horizontalHeader()->setResizeMode(1, QHeaderView::Fixed);
horizontalHeader()->setResizeMode(2, QHeaderView::Fixed);
horizontalHeader()->setDefaultSectionSize(150);
verticalHeader()->setResizeMode(0, QHeaderView::Fixed);
//for (register int i = 0; i < 0xAAAAAAA; ++i)
// verticalHeader()->setResizeMode(i, QHeaderView::Fixed);
verticalHeader()->setDefaultSectionSize(20); // - вот из-за этого получаются тормоза
}

Вариант 2:
------------------------
MemView::MemView(QWidget* parent)
: QTableView(parent)
{
horizontalHeader()->setResizeMode(QHeaderView::Fixed);
horizontalHeader()->setDefaultSectionSize(150);
verticalHeader()->setResizeMode(QHeaderView::Fixed);
//verticalHeader()->setMinimumSectionSize(16); - не помогает
verticalHeader()->setDefaultSectionSize(20); // - опять же тормоза
}

??

anterior
() автор топика
Ответ на: комментарий от anterior

2ой вариант, тормоза будут в любом случае, просто так они будут 1 раз (в начале), а ты делал ресайз, как я понял, далеко не 1 раз

PayableOnDeath
()
Ответ на: комментарий от PayableOnDeath

Можно пожалуйста простенький пример как надо делать, а то я чего-то совсем ничего не догоняю...может переутомилсо...

anterior
() автор топика
Ответ на: комментарий от vasily_pupkin

> 2^32?!?! На чем ты его запускаешь? (%

На домашнем кластере =) шутка. Обычный Athlon X2 2Ггц

anterior
() автор топика
3 сентября 2009 г.

А не проще было динамически подкачивать строки? создать таблицу 2х32 первая строка будет 0х0000000, последняя 0х000001F, добавить скролл, в зависимости от состояния которого будет расчитываться текущая таблица, например, скрол сдвинули вниз на один, тогда первая строка 0х0000001, последняя 0х0000020

ryuugan
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.