Название: QComboBox - отрисовка в строке ввода Отправлено: spectre71 от Июнь 19, 2009, 18:39 Сделал свой делегат для QComboBox, в выпадающем списке делаем свою отрисовку.
Не могу понять, как сделать ту же отрисовку(для выбранного индекса) в строке ввода комбобокса. И дополнительный вопрос для текущей итерации отрисовки QAbstractItemDelegate::paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) Как получить из option цвет фонта которым рисовать. Название: Re: QComboBox - отрисовка в строке ввода Отправлено: BRE от Июнь 19, 2009, 18:47 Как получить из option цвет фонта которым рисовать. У фонта нет цвета, все цвета находяться в палитре:QPalette QStyleOption::palette Название: Re: QComboBox - отрисовка в строке ввода Отправлено: spectre71 от Июнь 19, 2009, 19:18 У фонта нет цвета, все цвета находяться в палитре: Я спросил как получить цвет фонта(можно сказать для фонта), а не то что у фонта есть цвет.QPalette QStyleOption::palette Мне нужен цвет который я установлю в QPainter::setPen, когда буду ввыводить текст через QPainter::drawText Название: Re: QComboBox - отрисовка в строке ввода Отправлено: BRE от Июнь 19, 2009, 19:53 Я спросил как получить цвет фонта(можно сказать для фонта), а не то что у фонта есть цвет. Посмотри внимательно описание:Мне нужен цвет который я установлю в QPainter::setPen, когда буду ввыводить текст через QPainter::drawText enum QPalette::ColorRole и const QColor & QPalette::color ( ColorGroup group, ColorRole role ) const Название: Re: QComboBox - отрисовка в строке ввода Отправлено: spectre71 от Июнь 19, 2009, 20:02 Посмотри внимательно описание: enum QPalette::ColorRole и const QColor & QPalette::color ( ColorGroup group, ColorRole role ) const QAbstractItemDelegate::paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) Тогда как мне получить ColorGroup и ColorRole для отрисовки текста для текущей итерации paint, тогда я смогу из QPalette вытащить нужный цвет. Ну а самое главное по поводу отрисовки(для выбранного индекса) в строке ввода комбобокса кто знает? Название: Re: QComboBox - отрисовка в строке ввода Отправлено: BRE от Июнь 19, 2009, 20:10 QAbstractItemDelegate::paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) Что-то типа такого (это для QStyleOptionViewItem):Тогда как мне получить ColorGroup и ColorRole для отрисовки текста для текущей итерации paint, тогда я смогу из QPalette вытащить нужный цвет. Код: QPalette::ColorGroup cg = option.state & QStyle::State_Enabled? QPalette::Normal : QPalette::Disabled; Название: Re: QComboBox - отрисовка в строке ввода Отправлено: spectre71 от Июнь 19, 2009, 20:39 Короче с палитрой я понял, думал что есть более простой способ.
Я понимаю, когда хочешь чего-то изменить, поиграться со стилями итд. Но получать таким способ текущие цвета по умолчанию - явно перемудрили. Название: Re: QComboBox - отрисовка в строке ввода Отправлено: BRE от Июнь 19, 2009, 20:47 Посмотри еще на QStyle, им можно рисовать, что надо:
Код
Название: Re: QComboBox - отрисовка в строке ввода Отправлено: spectre71 от Июнь 19, 2009, 21:30 Посмотри еще на QStyle, им можно рисовать, что надо: Ты имеешь ввиду для отрисовки в строке ввода? Попробую.Название: Re: QComboBox - отрисовка в строке ввода Отправлено: spectre71 от Июнь 19, 2009, 21:48 Вроде так должно получиться
Код
Название: Re: QComboBox - отрисовка в строке ввода Отправлено: Barmaglodd от Июнь 20, 2009, 09:23 Сделал свой делегат для QComboBox, в выпадающем списке делаем свою отрисовку. +сто тыщь мильёновНе могу понять, как сделать ту же отрисовку(для выбранного индекса) в строке ввода комбобокса. Когда смотрел исходники QComboBox (для 4.4.3), там был QLineEdit, и данные ему тупо через QVariant:toString передавались, тем самым игнорируя делегат и локаль. Переписывать QComboBox не захотел, поэтому в исходниках Qt поправил, как нужно. Если кто-то имеет нормальную реализацию QComboBox, поделитесь :) Или с удовольствием приму участие в написании. Название: Re: QComboBox - отрисовка в строке ввода Отправлено: spectre71 от Июнь 20, 2009, 11:42 Короче покопался в исходниках и нашел решение.
Код
Рисуем в editRect , то что хотим! |