Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QPainter::drawLine和QPainter::drawText在Qt中存在不同颜色的问题_Qt - Fatal编程技术网

QPainter::drawLine和QPainter::drawText在Qt中存在不同颜色的问题

QPainter::drawLine和QPainter::drawText在Qt中存在不同颜色的问题,qt,Qt,我面临使用QPainter绘制不同颜色的线条和文字的问题。我正在使用下面的代码来实现这一点,但它不起作用。线条和文字都是使用图形文字的颜色集绘制的 void MyWidget::drawHorLinesWithText(QPainter & painter, const QRect & rect) { for(int i=0; i < 5; i++) { QPen penHLines(QColor("#0e5a77"), 1, Qt::D

我面临使用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);
    }
}
void MyWidget::drawHorLinesWithText(QPainter&painter,const QRect&rect)
{  
对于(int i=0;i<5;i++)
{
QPen-penHLines(QColor(#0e5a77)),1,Qt::DotLine,Qt::FlatCap,Qt::RoundJoin;
画家:塞彭(彭林);
油漆工.拉丝(10,50-(5*(i+1)),200,50-(5*(i+1));
QString strNumber=QString::number((2)*(i+1));
setFont(QFont(“Arial”,8,QFont::Bold));
//QBrush刷(QColor(#00e0fc”);
//画家。挫折(画笔);
QPen penHText(QColor(#00e0fc”);//此处也使用此颜色绘制线条
画师:设置笔(penHText);
painter.drawText(5,50-(5*(i+1))-10,20,30,Qt::AlignHCenter | Qt::AlignVCenter,
标准编号);
}
}

我将如何为绘制线条和文本设置不同的颜色。任何建议。谢谢

QPaint使用QBrush而不是QPen绘制文本。文本使用字形笔划渲染,然后使用当前笔刷填充。当前笔仅控制线条和笔划。

这适用于我使用Qt5.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();
}
#包括
类Widget:publicqwidget
{
公众:
Widget(){
调整大小(200200);
}
无效paintEvent(QPaintEvent*){
油漆工(本);
对于(int i=0;i<5;i++)
{
QPen-penHLines(QColor(#0e5a77”)、10、Qt::DotLine、Qt::FlatCap、Qt::RoundJoin);
画家:塞彭(彭林);
油漆工.拉丝(10,50-(5*(i+1)),200,50-(5*(i+1));
QString strNumber=QString::number((2)*(i+1));
setFont(QFont(“Arial”,8,QFont::Bold));
QPen penHText(QColor(#00e0fc));
画师:设置笔(penHText);
painter.drawText(5,50-(5*(i+1))-10,20,30,Qt::AlignHCenter | Qt::AlignVCenter,strNumber);
}
}
};
int main(int argc,char*argv[])
{
QApplication应用程序(argc、argv);
小部件w;
w、 show();
返回app.exec();
}
我将线宽增加到10以查看发生了什么:


我已经用QBrush试过了。但同样的结果。请检查我的密码。我注释掉了QBrush,因为它在我的案例中不起作用。根据文档:“钢笔定义了如何绘制线条和轮廓,它还定义了文本颜色。”正如我在代码中提到的,我尝试使用QBrush和QPen,但结果是一样的。我遗漏了什么吗?如果我做错了什么,请指导我。在您第一次调用setPen()时,您没有使用上面创建的笔。这是您复制/粘贴到此处时添加的打字错误吗?在您上次的drawText()中还有一个额外的括号为什么每次迭代都要重新创建
QPen
s?嗨,三氯生,我想分别为绘制线条和绘制文本设置不同的颜色。我对这个问题投了否决票,因为您没有努力确保它能够真正编译,这实际上影响了我们能帮助你的程度,而且通常会浪费每个人的时间。