2012-02-28 163 views
8

我正面臨使用QPainter繪製不同顏色的線和文本的問題。我正在使用下面的一段代碼來實現這一點,但它不工作。這兩行和文本均使用繪製文本的顏色集繪製。QPainter :: drawLine和QPainter :: drawText在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); 
    } 
} 

我將如何爲繪製線和文本設置不同的顏色。有什麼建議麼。謝謝。

+0

在你第一次調用setPen(),您不使用創建略高於筆。這是在您複製/粘貼時添加的錯字嗎?在最後一個drawText() – Leiaz 2012-02-28 15:06:05

+0

中還有一個額外的括號,爲什麼在每次迭代中重新創建'QPen'? – triclosan 2012-02-28 16:16:50

+0

嗨三氯生,我想分別設置不同的顏色繪製線條和繪製文本。 – user1182217 2012-02-29 05:51:26

回答

-2

QPainter使用QBrush繪製文本,而不是QPen。文字以字形筆畫呈現,然後用當前畫筆填充。當前筆只控制線條和筆劃。

+0

我已經試過用QBrush。但結果相同。請檢查我的發佈代碼。我將QBrush評論爲不適合我的情況。 – user1182217 2012-02-28 15:01:49

+3

根據文檔:[QPainter :: setPen()](http://developer.qt.nokia.com/doc/qt-4.8/qpainter.html#setPen)「筆定義瞭如何繪製線條和輪廓,它也定義了文字的顏色。「 – Leiaz 2012-02-28 15:19:22

+2

我站好了。 :) – 2012-02-28 16:17:05

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