2012-02-28 41 views
8

Tôi đang gặp sự cố khi vẽ đường kẻ và văn bản có màu khác nhau bằng cách sử dụng QPainter. Tôi đang sử dụng đoạn mã sau để đạt được điều này nhưng nó không hoạt động. Cả hai dòng và văn bản đều được vẽ bằng cách sử dụng bộ màu để vẽ Văn bản.QPainter :: drawLine và QPainter :: drawText với vấn đề màu sắc khác nhau trong 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); 
    } 
} 

Làm cách nào để đặt các màu sắc khác nhau để vẽ đường và nội dung. Bất kỳ đề xuất. Cảm ơn.

+0

Trong cuộc gọi đầu tiên của bạn để setPen(), bạn không sử dụng bút được tạo ra chỉ ở trên. Đó là một lỗi đánh máy đã được thêm vào khi bạn sao chép/dán vào đây? Ngoài ra còn có một dấu ngoặc đơn phụ trong drawText cuối cùng của bạn() – Leiaz

+0

tại sao tái tạo 'QPen's tại mỗi lần lặp? – triclosan

+0

Hi triclosan, tôi muốn đặt các màu khác nhau để vẽ các đường và vẽ các văn bản riêng biệt. – user1182217

Trả lời

-2

Vẽ văn bản QPrnter bằng QBrush chứ không phải QPen. Văn bản được hiển thị bằng nét glyph sau đó được tô đầy bằng cọ hiện tại. Bút hiện tại chỉ kiểm soát các đường và nét.

+0

Tôi đã thử với QBrush. Nhưng cùng một kết quả. Vui lòng kiểm tra mã đã đăng của tôi. Tôi đã nhận xét về QBrush vì nó không hoạt động trong trường hợp của tôi. – user1182217

+3

Theo tài liệu: [QPainter :: setPen()] (http://developer.qt.nokia.com/doc/qt-4.8/qpainter.html#setPen) "Bút xác định cách vẽ đường kẻ và vạch ra, và nó cũng xác định màu chữ. " – Leiaz

+2

Tôi đã sửa. :) –

5

Điều này phù hợp với tôi với Qt 5.3; có lẽ đó là một lỗi trong phiên bản bạn đang sử dụng?

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

tôi tăng chiều rộng đường đến 10 để xem những gì đang xảy ra:

qpainter

Các vấn đề liên quan