2012-02-28 12 views
8

QPainterを使用して線と線を異なる色で描画する際に問題に直面しています。私はこれを達成するために次のコードを使用していますが、動作しません。線とテキストの両方が、テキストを描画するために設定された色を使用して描画されます。QPainter :: drawLineとQPainter :: QTで異なる色の問題を持つdrawText

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); 
    } 
} 

どのように線とテキストを描画するために異なる色を設定しますか?助言がありますか。ありがとう。

+0

setPen(にあなたの最初の呼び出しでは)、あなただけ上記で作成したペンを使用しないでください。ここでコピー/ペーストしたときに追加されたタイプミスですか?あなたの最後のdrawText()に余分な括弧もあります。 – Leiaz

+0

なぜ各繰り返しで 'QPen'sを再作成しますか? – triclosan

+0

こんにちはtriclosan、線を描き、テキストを別々に描画するために、異なる色を設定したいと思います。 – user1182217

答えて

-2

QPaintでは、QPrではなくQBrushを使用してテキストを描画します。テキストはグリフストロークでレンダリングされ、現在のブラシで塗りつぶされます。現在のペンは線と線のみを制御します。

+0

QBrushで既に試してみました。しかし、同じ結果。投稿したコードを確認してください。私はQBrushが私の場合は機能しないとコメントしました。 – user1182217

+3

doc:[QPainter :: setPen()](http://developer.qt.nokia.com/doc/qt-4.8/qpainter.html#setPen)によると、 "ペンは線や輪郭を描く方法を定義していますが、テキストの色も定義します。 " – Leiaz

+2

私は訂正しました。 :) –

5

これはQt 5.3で動作します。おそらくあなたが使用していたバージョンのバグでしたか?

#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(); 
} 

私は何が起こっているのか確認するために10の線幅を増加:

qpainter

関連する問題