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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableView не хочет понимать QAbstractTableModel  (Прочитано 6719 раз)
Caduceus
Гость
« : Октябрь 19, 2010, 22:22 »

У меня в процессе работы программы меняется количество строк в QAbstractTableModel
В методе rowCount я возращаю это коичесвто строк

Когда это количество строк меняется - я из модели шлю emit dataChanged

А во View колчиество строк не меняется - их столько сколько в начале. Что я не так делаю?

И еще. Я понимаю, что тема избита и увидел тут же в поиске кучу вариантов ответов, но так и не понял как делать - размеры, эти гребаные размеры строк и столбцов. Где их выставлять? В headerData на Qt::SizeHintRole? В делегатах? где?
Записан
BlackTass
Гость
« Ответ #1 : Октябрь 19, 2010, 23:11 »

dataChanged() это изменение данных внутри уже существующих элементов. При добавлении новых строк надо юзать пару beginInsertRow/endInsertRow
Записан
Kolobok
Гость
« Ответ #2 : Октябрь 19, 2010, 23:16 »

В описании класса QAbstractTableModel прочитай раздел Subclassing.
Записан
CroCIV
Гость
« Ответ #3 : Октябрь 20, 2010, 08:51 »

И еще. Я понимаю, что тема избита и увидел тут же в поиске кучу вариантов ответов, но так и не понял как делать - размеры, эти гребаные размеры строк и столбцов. Где их выставлять? В headerData на Qt::SizeHintRole? В делегатах? где?

Эти гребаные размеры столбцов можно выставить setColumnWidth ( int column, int width ), resizeColumnToContents ( int column ), resizeColumnsToContents () этого гребаного класса QTableView, мать его так. или так же можно получить указатель на "горизонтальный удар по голове" horizontalHeader () и в нем выставить setResizeMode ( int logicalIndex, ResizeMode mode ) setDefaultSectionSize ( int size ) setMinimumSectionSize ( int size ) setStretchLastSection ( bool stretch ) resizeSection ( int logicalIndex, int size )
Относительно строк все тоже самое, только вместо слова Column будет Row, а вместо слова horisontal - vertical. Ассистант в руки http://doc.crossplatform.ru/qt/4.6.x/classes.html
Записан
Caduceus
Гость
« Ответ #4 : Октябрь 20, 2010, 21:35 »

Спасибо большое. Но!
Если выставить у вида verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); - то есть типа о ресайзится в зависимсоти от контента - но это нифига так не получается - если в модели в headerData убрать ветку if (role == Qt::SizeHintRole) - (где я выставляю сам размеры конкретными чисалми, не зная как узнать размер контента), то нужный мне вертикальный хидер оказывается нулевой ширины.
Если же не убирать ветку if (role == Qt::SizeHintRole), то размеры такие, как я укзаываю в этой ветке не ресайзятся под размеры контента. Как быть-то?
Записан
CroCIV
Гость
« Ответ #5 : Октябрь 21, 2010, 07:49 »

Спасибо большое. Но!
Если выставить у вида verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); - то есть типа о ресайзится в зависимсоти от контента - но это нифига так не получается - если в модели в headerData убрать ветку if (role == Qt::SizeHintRole) - (где я выставляю сам размеры конкретными чисалми, не зная как узнать размер контента), то нужный мне вертикальный хидер оказывается нулевой ширины.
Если же не убирать ветку if (role == Qt::SizeHintRole), то размеры такие, как я укзаываю в этой ветке не ресайзятся под размеры контента. Как быть-то?

похоже на баги где-то в твоем собственном коде. Если ты создашь пустой проект, выставишь setResizeMode(QHeaderView::ResizeToContents); начнешь таблицу заполнять своими данными, то увидишь, что все норм работает.
Ты случаем не перекрывал стандартный класс типа QTableView/Widget или QHeaderView? Если нет, то значит ищи ошибки в своем коде, если да, смотри перекрытые методы типа sizeHint и ищи свои ошибки.
Благо (ВЕЛИЧАЙШЕЕ) библиотека открытая, если получаешь неожиданный результат, всегда можно под отладчиком посмотреть, что и как работает.
« Последнее редактирование: Октябрь 21, 2010, 07:52 от CroCIV » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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