Название: QTableView не хочет понимать QAbstractTableModel Отправлено: Caduceus от Октябрь 19, 2010, 22:22 У меня в процессе работы программы меняется количество строк в QAbstractTableModel
В методе rowCount я возращаю это коичесвто строк Когда это количество строк меняется - я из модели шлю emit dataChanged А во View колчиество строк не меняется - их столько сколько в начале. Что я не так делаю? И еще. Я понимаю, что тема избита и увидел тут же в поиске кучу вариантов ответов, но так и не понял как делать - размеры, эти гребаные размеры строк и столбцов. Где их выставлять? В headerData на Qt::SizeHintRole? В делегатах? где? Название: Re: QTableView не хочет понимать QAbstractTableModel Отправлено: BlackTass от Октябрь 19, 2010, 23:11 dataChanged() это изменение данных внутри уже существующих элементов. При добавлении новых строк надо юзать пару beginInsertRow/endInsertRow
Название: Re: QTableView не хочет понимать QAbstractTableModel Отправлено: Kolobok от Октябрь 19, 2010, 23:16 В описании класса QAbstractTableModel прочитай раздел Subclassing.
Название: Re: QTableView не хочет понимать QAbstractTableModel Отправлено: CroCIV от Октябрь 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 (http://doc.crossplatform.ru/qt/4.6.x/classes.html) Название: Re: QTableView не хочет понимать QAbstractTableModel Отправлено: Caduceus от Октябрь 20, 2010, 21:35 Спасибо большое. Но!
Если выставить у вида verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); - то есть типа о ресайзится в зависимсоти от контента - но это нифига так не получается - если в модели в headerData убрать ветку if (role == Qt::SizeHintRole) - (где я выставляю сам размеры конкретными чисалми, не зная как узнать размер контента), то нужный мне вертикальный хидер оказывается нулевой ширины. Если же не убирать ветку if (role == Qt::SizeHintRole), то размеры такие, как я укзаываю в этой ветке не ресайзятся под размеры контента. Как быть-то? Название: Re: QTableView не хочет понимать QAbstractTableModel Отправлено: CroCIV от Октябрь 21, 2010, 07:49 Спасибо большое. Но! Если выставить у вида verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); - то есть типа о ресайзится в зависимсоти от контента - но это нифига так не получается - если в модели в headerData убрать ветку if (role == Qt::SizeHintRole) - (где я выставляю сам размеры конкретными чисалми, не зная как узнать размер контента), то нужный мне вертикальный хидер оказывается нулевой ширины. Если же не убирать ветку if (role == Qt::SizeHintRole), то размеры такие, как я укзаываю в этой ветке не ресайзятся под размеры контента. Как быть-то? похоже на баги где-то в твоем собственном коде. Если ты создашь пустой проект, выставишь setResizeMode(QHeaderView::ResizeToContents); начнешь таблицу заполнять своими данными, то увидишь, что все норм работает. Ты случаем не перекрывал стандартный класс типа QTableView/Widget или QHeaderView? Если нет, то значит ищи ошибки в своем коде, если да, смотри перекрытые методы типа sizeHint и ищи свои ошибки. Благо (ВЕЛИЧАЙШЕЕ) библиотека открытая, если получаешь неожиданный результат, всегда можно под отладчиком посмотреть, что и как работает. |