2012-02-28 9 views
8

Mam problem z rysowaniem linii i tekstu w innym kolorze za pomocą QPaintera. Używam poniższego fragmentu kodu, aby to osiągnąć, ale to nie działa. Obie linie i teksty są rysowane przy użyciu zestawu kolorów do rysowania tekstu.QPainter :: drawLine i QPainter :: drawText z innym kolorem w Qt

void MyWidget::drawHorLinesWithText(QPainter & painter, const QRect & rect) 
{ 
    for(int i=0; i < 5; i++) 
    { 
     QPen penHLines(QColor("#0e5a77"), 1, Qt::DotLine, Qt::FlatCap, Qt::RoundJoin); 
     painter.setPen(penHLines); 
     painter.drawLine(10, 50 - (5*(i+1)), 200, 50 - (5*(i+1))); 

     QString strNumber = QString::number((2)*(i+1)); 

     painter.setFont(QFont("Arial", 8, QFont::Bold)); 
     //QBrush brush(QColor("#00e0fc")); 
     //painter.setBrush(brush); 
     QPen penHText(QColor("#00e0fc"));//Here lines are also drawn using this color 
     painter.setPen(penHText); 
     painter.drawText(5, 50 - (5*(i+1)) - 10), 20, 30, Qt::AlignHCenter | Qt::AlignVCenter, 
         strNumber); 
    } 
} 

W jaki sposób ustawić różne kolory dla rysowania linii i tekstów. Jakieś sugestie. Dzięki.

+0

W pierwszym wywołaniu setPen(), aby nie używać pióra utworzonego tuż powyżej. Czy jest to literówka, która została dodana podczas kopiowania/wklejania? Istnieje również dodatkowy nawias w twoim ostatnim drawText() – Leiaz

+0

po co ponownie tworzyć 'QPen's w każdej iteracji? – triclosan

+0

Witam triklosan, chcę ustawić różne kolory do rysowania linii i rysowania tekstów osobno. – user1182217

Odpowiedz

-2

QPainter narysuj tekst za pomocą QBrush, a nie QPen. Tekst jest renderowany za pomocą pociągnięć glifu, a następnie wypełniany bieżącym pędzlem. Aktualne pióro kontroluje tylko linie i obrysy.

+0

Próbowałem już z QBrush. Ale ten sam wynik. Sprawdź mój opublikowany kod. Skomentowałem QBrush, ponieważ nie działa w moim przypadku. – user1182217

+3

Zgodnie z dokumentem: [QPainter :: setPen()] (http://developer.qt.nokia.com/doc/qt-4.8/qpainter.html#setPen) "Pióro definiuje sposób rysowania linii i konturów, a także definiuje kolor tekstu. " – Leiaz

+2

Stoję poprawione. :) –

5

Działa to dla mnie z Qt 5.3; może to był błąd w wersji, z której korzystałeś?

#include <QtWidgets> 

class Widget : public QWidget 
{ 
public: 
    Widget() { 
     resize(200, 200); 
    } 

    void paintEvent(QPaintEvent *) { 
     QPainter painter(this); 
     for(int i=0; i < 5; i++) 
     { 
      QPen penHLines(QColor("#0e5a77"), 10, Qt::DotLine, Qt::FlatCap, Qt::RoundJoin); 
      painter.setPen(penHLines); 
      painter.drawLine(10, 50 - (5*(i+1)), 200, 50 - (5*(i+1))); 

      QString strNumber = QString::number((2)*(i+1)); 

      painter.setFont(QFont("Arial", 8, QFont::Bold)); 
      QPen penHText(QColor("#00e0fc")); 
      painter.setPen(penHText); 
      painter.drawText(5, 50 - (5*(i+1)) - 10, 20, 30, Qt::AlignHCenter | Qt::AlignVCenter, strNumber); 
     } 
    } 
}; 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    Widget w; 
    w.show(); 
    return app.exec(); 
} 

zwiększyłem szerokość linii do 10, aby zobaczyć, co się dzieje:

qpainter