【问题标题】:qt c++ qpainter with QVectorqt c++ qpainter 与 QVector
【发布时间】:2015-04-15 13:53:55
【问题描述】:

所以我有一个名为 xarray 的 QVector

QVector< QString > xarray;

现在我要绘制数组

void MainWindow::paintEvent( QPaintEvent* e )
{
    QPainter painter(this);

    for(int i = 0; i < 5; i++)
    {
        qDebug() << "\r\narr : " <<QList<QString>::fromVector(xarray);
        painter.drawEllipse(X, 10, 100, 100);
    }
}

如何将数组提供给我的 x comp?

我试过了

painter.drawEllipse(xarray[i], 10, 100, 100);

但是没有调用QPainter的函数。

【问题讨论】:

  • 没有多大意义,字符串不是数字。为什么你的向量不是整数(或浮点数或其他东西)。
  • 我的数组是由一个 XML 文件推送的。如果我选择浮动或双倍,他将无法再读取我的文件:-(
  • 代码中的X是什么? i 如何在 for 循环中使用?需要进行太多假设才能理解代码的实际目的是什么。你能澄清一下吗?
  • @user3676560:在循环中从你的数组中取出QString。然后将其转换为int
  • X 是我放置数组的地方。用“i”循环数组

标签: c++ qt qpainter


【解决方案1】:

一个简单的实现可能如下所示:

void MainWindow::paintEvent(QPaintEvent *e)
{
    QPainter painter(this);

    for(int i = 0; i < 5; i++)
    {
        painter.drawEllipse(xarray[i].toFloat(), 10.0, 100.0, 100.0);
    }
}

您需要将QString 值转换为float 值,然后才能将其用作drawEllipse 的参数

但在实际代码中,我强烈建议确保xarray 中的值在使用之前可以转换为float

【讨论】:

    【解决方案2】:

    我想你正在寻找QString::toInt()

    您有一个 QString 数组,但您需要将一个 int 传递给 drawEllipse(),即采用 int 的重载。您需要将字符串转换为整数。

    快速编辑您的代码会将其变为:

    void MainWindow::paintEvent(QPaintEvent *e)
    {
        QPainter painter(this);
    
        for(int i = 0; i < 5; i++)
        {
           qDebug() << "\r\narr : " <<QList<QString>::fromVector(xarray);
           painter.drawEllipse(xarray[i].toInt(), 10, 100, 100);
        }
     }
    

    我实际上并没有编译它,希望它有效并且你明白了。

    【讨论】:

    • 我收到一条错误消息:没有匹配函数调用 'QPainter::drawEllipse(, int, int, int)'painter.drawEllipse(xarray[i].toInt , 10, 100, 100);
    • 您可以从文件中复制粘贴带有 drawEllipse 的确切行吗?
    • painter.drawEllipse(xarray[i].toInt, 10, 100, 100);
    • 是的。我从错误消息中对此有一种感觉:)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    相关资源
    最近更新 更多