Russian Qt Forum
Май 17, 2024, 18:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: delegate::paint  (Прочитано 4932 раз)
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();
}
Записан
EhTemka
Гость
« Ответ #1 : Январь 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());, если я тебя правильно понял   
Записан
nik135
Гость
« Ответ #2 : Январь 30, 2008, 09:36 »

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

ps. А как нарисованный текст выровнять в ячейке по центру?
« Последнее редактирование: Январь 30, 2008, 10:49 от nik135 » Записан
EhTemka
Гость
« Ответ #3 : Январь 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);
Записан
nik135
Гость
« Ответ #4 : Январь 31, 2008, 00:25 »

Спасибо огромное, завтра попробую!! Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.043 секунд. Запросов: 17.