[Qt] QTextDocument default foreground color

0

Witam,

Potrzebuje zmienić kolor tekstu w QTextDocument, ale tylko tych fragmentów, które nie miały ustawionego koloru, a stosują domyślny (czarny) kolor.
Grzebiąc cierpliwie w dokumentacji znalazłem coś takiego:

Trolltech napisał(a)

<font size="2">void QTextFormat::clearForeground ()</span>

Clears the brush used to paint the document's foreground. The default brush will be used.

Bardzo fajnie, ale gdzie do można zmienić wartość "default brush"?
Przeszukuję dokumentację już dość długo i wkrótce skończy mi się cierpliwość.

W tej chwili jedyne rozwiązanie jakie widzę (do d.py), to na chama przeiterować przez wszystkie fragmenty tekstu i ustawiać kolor brush'a tam gdzie nie ma koloru, ale co potem, gdy trzeba zmienić znowu kolor?

edit: po 10 minutach google już przeczytał ten topic i pokazuje na pierwszym miejscu przy odpowiednim zapytaniu :-O

0

zobacz tym: void QTextFormat::setForeground ( const QBrush & brush )

0
kotlar napisał(a)

zobacz tym: void QTextFormat::setForeground ( const QBrush & brush )

Nie zauważyłeś, że podałem cytat z trolltech'a? To jest bratnia metoda!
Można się chyba domyśleć, że czytałem to i dokładnie z tej metody doklikałem się do clearForeground, a tam piszą coś o domyślnym brush'u. Ja szukam gdzie się ustawia tą wartość domyślną, a nie jak ustawić QTextFormat dla fragmentu tekstu.

0

void QTextFormat::setForeground ( const QBrush & brush )

Poćwicz.

0

[glowa]
Przecież, sam na początku piszę o tej klasie! Umiem czytać dokumentację. A takie gadanie/pisanie "poćwicz" to ewidentna próba doprowadzenia mnie do rozstroju nerwowego.

Próbowałem nawet tak, bo wydawało się to logiczne:

void DocTestClass::setColor(QColor color)
{
    QTextFrameFormat format = doc.rootFrame()->frameFormat();
    QBrush brush = format.foreground();
    brush.setColor(color);
    format.setForeground(brush);
    doc.rootFrame()->setFrameFormat(format);
    update();
}

ale nie działa to na tekst :-[ .

Mogę teoretycznie zastosować QTextDocument::defaultStyleSheet, ale żeby to zadziałało muszę na nowo ustawić zawartość dokumentu (setHtml), co jest podwójnie bezsensu.

Ja chcę jedynie zmienić kolor napisów, które nie miały zdefiniowanego koloru za pomocą tagu (gdy używa się setHtml). Skoro w QTextFormat jest clearForeground i napisane jest coś o "default brush" to powinno być to możliwe do zrobienia, w jakiś prosty jasny sposób.

0

Spróbuj może stylów dla QTextEdita,nie dla QTextDocumentu Marku:
http://qt.nokia.com/doc/4.5/stylesheet-reference.html

0

Bardziej konkretna odpowiedź, ale to nadal nie to. Te style, służą do zmieniania wyglądu całej aplikacji i/lub poszczególnych kontrolek. W ten sposób W ten sposób Qt może symulować wygląd innych systemów operacyjnych.
Ja niestety piszę własny Widget, który posługuje się QTextDocument i nawet powinienem wspierać obsługę tych stylów, więc docieram do tego samego problemu od innej strony :(.

0

Dobra znalazłem rozwiązanie (przynajmniej postanowiłem zignorować problem, aż rozwiązanie znajdę przez przypadek :P). Po prostu w moim komponencie metoda paint ma wyglądać mniej-więcej tak:

void MyTextItem::paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget *)
{
    QAbstractTextDocumentLayout::PaintContext ctx;
    ctx.clip = option->exposedRect;
    ctx.palette.setColor(QPalette::Text, mColor);
    doc.documentLayout()->draw(painter,ctx);
}

A jak ktoś sam sobie nie rysuje dokumentu to jest ugotowany, nie da się.

1 użytkowników online, w tym zalogowanych: 0, gości: 1