在Qt中,使用QPainter::drawLine和QPainter::drawText绘制不同颜色存在问题

8
我在使用QPainter绘制线条和文本时遇到了问题,希望能够使用不同的颜色来绘制它们。我尝试了以下代码,但是没有成功。所有的线条和文本都是使用绘制文本时设置的颜色绘制的。
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);
    }
}

我应该如何为绘制线条和文本设置不同的颜色?有什么建议吗?谢谢。


在你第一次调用setPen()时,你没有使用刚刚创建的画笔。这是否是复制/粘贴到这里时添加的错误?在你最后的drawText()中也有一个多余的括号。 - Leiaz
为什么要在每次迭代中重新创建 QPen - triclosan
嗨,triclosan,我想要分别为绘制线条和绘制文本设置不同的颜色。 - Rajeev Sahu
2
我对这个问题进行了负评,因为你没有付出努力确保它能够编译通过,这实际上会影响我们能够提供多少帮助,并且通常会浪费所有人的时间。 - Mitch
2个回答

7
这对我来说在Qt 5.3版本中可行;也许你使用的版本有bug?
#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

0

QPainter使用QBrush绘制文本,而不是使用QPen。文本是用字形笔画渲染,然后用当前的画刷进行填充。当前的画笔只控制线条和笔画。


我已经尝试使用QBrush了,但是结果还是一样。请检查我的发布的代码。我将QBrush注释掉了,因为在我的情况下它无法工作。 - Rajeev Sahu
4
根据文档:QPainter::setPen(),“笔定义了如何绘制线条和轮廓,并且还定义了文本颜色。” - Leiaz
正如我的代码中所提到的,我尝试使用QBrush和QPen,但结果仍然是一样的。我有什么遗漏的吗?如果我做错了什么,请指导我。 - Rajeev Sahu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接