【问题标题】:QPainter::drawLine and QPainter::drawText with different color issue in QtQPainter::drawLine 和 QPainter::drawText 在 Qt 中具有不同的颜色问题
【发布时间】:2012-02-28 14:18:22
【问题描述】:

我在使用 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() 中还有一个额外的括号
  • 为什么每次迭代都要重新创建QPens?
  • 你好三氯生,我想分别为画线和画文字设置不同的颜色。
  • 我否决了这个问题,因为您没有付出任何努力来确保它实际编译,这实际上影响了我们可以为您提供多少帮助,并且通常会浪费每个人的时间。

标签: qt


【解决方案1】:

这对我来说适用于 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 以查看发生了什么:

【讨论】:

    【解决方案2】:

    QPainter 使用 QBrush 而非 QPen 绘制文本。文本用字形笔触渲染,然后用当前画笔填充。当前的笔只控制线条和笔划。

    【讨论】:

    • 我已经尝试过使用 QBrush。但同样的结果。请检查我发布的代码。我注释掉了 QBrush,因为它在我的情况下不起作用。
    • 根据文档:QPainter::setPen()“笔定义了如何绘制线条和轮廓,还定义了文本颜色。”
    • 正如我的代码中提到的,我尝试使用 QBrush 和 QPen,但结果是一样的。我错过了什么吗?如果我做错了什么,请指导我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    相关资源
    最近更新 更多