Russian Qt Forum

Qt => Model-View (MV) => Тема начата: nik135 от Января 29, 2008, 23:14



Название: 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, спасибо большое, заработало. Только без
Код:
ctx.clip = option.rect;
С ним рисует всего одну ячейку. Почему так - не пойму.

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
Спасибо огромное, завтра попробую!! :)