Название: [РЕШЕНо]QStyledItemDelegate Отправлено: Larry от Июль 26, 2016, 15:50 Добрый день, форумчане.
Подскажите пожалуйста, как сделать отступ при левом выравнивании, т.к. текст упирается в рамку ячейки. На рисунке видно, что текст идет впритык с рамкой... Название: Re: QStyledItemDelegate Отправлено: gil9red от Июль 26, 2016, 15:56 Например, в QStyledItemDelegate::paint (http://doc.qt.io/qt-4.8/qstyleditemdelegate.html#paint) рисовать так, чтобы был отступ.
Тут (https://github.com/gil9red/combustion/blob/master/scheduler_celldelegate.cpp) можно посмотреть пример реализации делегата, правда текст я не рисовал -- его дорисовывал родительский метод paint. А как выглядит результат можно увидеть тут (https://github.com/gil9red/combustion/#%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%D1%8B). Название: Re: QStyledItemDelegate Отправлено: Larry от Июль 26, 2016, 15:58 Сейчас рисую так:
Код: QString text = index.data().toString(); Название: Re: QStyledItemDelegate Отправлено: gil9red от Июль 26, 2016, 16:00 Ну укажите перед рисованием текста в rect ваш отступ
что-то вроде Код
Название: Re: QStyledItemDelegate Отправлено: Larry от Июль 26, 2016, 16:05 Спасибо, так лучше ;D. Туплю иногда ;D
Название: Re: QStyledItemDelegate Отправлено: Larry от Июль 27, 2016, 10:36 Добрый день.
Дабы не плодить темы, решил продолжить здесь. Мне необходимо реализовать таблицу по функционалу приближенную к таблицам excel - в плане отображения и редактирования. Наткнулся на проблему с переносом слов, когда данные не влазят полностью в ячейку. Выставил Код: verticalHeader()->resizeSections(QHeaderView::ResizeToContents); Как можно выделять фрагмент текста в ячейке другим цветом, шрифтом? Отображение через делегат: Код: QString text = index.data().toString(); Название: Re: QStyledItemDelegate Отправлено: Larry от Июль 27, 2016, 15:34 Так и не понял в чем проблема при переносе строк. Вернее не перенос строк, а изменение высоты строки по содержимому. От 0 до 255 строки все работает, а дальше перестает. В чем может быть проблема?
Название: Re: QStyledItemDelegate Отправлено: Larry от Июль 27, 2016, 17:36 Переопределил метод sizeHint для QStyledItemDelegate и получил, то что он вызывается только для строк от нуля до 255 ???
При запуске программы отображается 21 строка, а в отладчике он шлет сразу sizeHint для строк от нуля до 255??? После прокрутки ничего уже не меняется и sizeHint не вызывается. Почему? Название: Re: QStyledItemDelegate Отправлено: Bepec от Июль 27, 2016, 18:05 После загрузки данных в зависимости от настроек View размеры либо УЖЕ установлены, либо вычислен максимальный размер (если установлен флаг ResizeToContents).
А сколько всего строк в таблице, на которую вы ставите делегат и сколько строк является видимыми. PS это моё видение ситуации :D Название: Re: QStyledItemDelegate Отправлено: Larry от Июль 27, 2016, 19:33 на данный момент в базе около 19000 строк, видимых 21 строка. Метод paint из делегата вызывается для каждой строки, а sizehint только 255 раз.
Название: Re: QStyledItemDelegate Отправлено: Bepec от Июль 27, 2016, 19:47 А если прокрутить до конца и в начало, сколько будет вызовов?
Название: Re: QStyledItemDelegate Отправлено: Larry от Июль 27, 2016, 20:22 если прокрутить от начала и до конца, то paint будет вызван столько, сколько строк, а sizeHint только 255 раз, при том, что вызовы будут в самом начале при запуске и потом при прокрутке sizehint вызываться больше не будут.
Название: Re: QStyledItemDelegate Отправлено: Bepec от Июль 27, 2016, 20:39 Ну тут уже смотреть надо что почём, а мне лень проект делать, модель туда сувать,заполнять ещё, делегат писать :)
Название: Re: QStyledItemDelegate Отправлено: Larry от Июль 27, 2016, 20:44 А вариантов никаких нет? Просто, я целый день потратил...пока sizeHint не переопределил...грешил на перенос слов...До строки 256 все хорошо отображает, все переносится, а дальше никак. Сколько не лопатил интернет, то ничего напоминающего поведение у меня не нашел.
Название: Re: QStyledItemDelegate Отправлено: Bepec от Июль 27, 2016, 22:39 Ну, если скинете проект, я могу посмотреть что там за фигня, но эт ещё как время будет.
Название: Re: QStyledItemDelegate Отправлено: Larry от Июль 27, 2016, 22:48 хорошо, спасибо.Скину, Как только доберусь.
Название: Re: QStyledItemDelegate Отправлено: Larry от Июль 28, 2016, 10:02 Строчку
Код: verticalHeader()->resizeSections(QHeaderView::ResizeToContents); Код: verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); |