Название: delegate::paint
Отправлено: nik135 от Января 29, 2008, 23:14
Задался целю рисовать в делегате html, и в принципе у меня получилось, только не совсем. Не могу изменить цвет у шрифта. Как сделать, а то никак не выходит. у painter'а все менять пробовал. Если тупой вопрос, извиняйте. void delegate::paint(QPainter* painter,const QStyleOptionViewItem& option,const QModelIndex& index )const{ painter->save(); if (option.state & QStyle::State_Selected) drawBackground(painter, option, index);
QTextDocument* doc=new QTextDocument(); QString str="<html><body><p><font face=\"Symbol\">t</font><font face=\"Tahoma\">d</font></p></body></html>";
doc->setUndoRedoEnabled(false);
doc->setHtml(str); doc->setTextWidth(option.rect.width()); doc->setUseDesignMetrics(true); doc->setDefaultTextOption (QTextOption(Qt::AlignHCenter)); doc->setDefaultFont(QFont("Tahoma",13,QFont::Bold)); drawDisplay(painter, option, option.rect,"");
painter->translate(option.rect.topLeft()); doc->drawContents(painter,QRectF()); painter->restore(); }
Название: Re: delegate::paint
Отправлено: EhTemka от Января 30, 2008, 06:22
QPalette YouPalette; // YouPalette.setColor..... и т.д, какая палитра тебе нужна такую и задаешь QAbstractTextDocumentLayout::PaintContext ctx; ctx.palette = YouPalette; ctx.clip = option.rect; doc->documentLayout()->draw(&painter, ctx); Попробуй так вместо doc->drawContents(painter,QRectF());, если я тебя правильно понял
Название: Re: delegate::paint
Отправлено: nik135 от Января 30, 2008, 09:36
EhTemka, спасибо большое, заработало. Только без С ним рисует всего одну ячейку. Почему так - не пойму. ps. А как нарисованный текст выровнять в ячейке по центру?
Название: Re: delegate::paint
Отправлено: EhTemka от Января 30, 2008, 17:39
Времени сейчас мало, давай я тебе код свой дам, не совсем мож хороший но я думаю поможет разобратся QTextDocument doc; doc.setHtml(index.data(Qt::UserRole + 1).toString()); doc.setTextWidth(option.rect.width() - 40); QPixmap pix(doc.size().toSize()); pix.fill(Qt::transparent); QPainter p(&pix); p.setPen(Qt::NoPen); QAbstractTextDocumentLayout::PaintContext ctx; ctx.palette = myPalette; QRect r = pix.rect(); if (r.isValid()) { p.setClipRect(r); ctx.clip = r; } doc.documentLayout()->draw(&p, ctx); painter->drawPixmap(option.rect.x() + 20, option.rect.y(), pix);
Название: Re: delegate::paint
Отправлено: nik135 от Января 31, 2008, 00:25
Спасибо огромное, завтра попробую!! :)
|