Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QGraphicsScene QPainterPath::arcTo: Adding arc where a parameter is NaN, results are undefined
Forum Updated to NodeBB v4.3 + New Features

QGraphicsScene QPainterPath::arcTo: Adding arc where a parameter is NaN, results are undefined

Scheduled Pinned Locked Moved General and Desktop
4 Posts 2 Posters 6.0k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Offline
    K Offline
    kiepmad
    wrote on last edited by
    #1

    Hello,

    I just started out with QT and have a problem that I can't seem to solve.
    I'm working on Nine Men's Morris and the everything works great, except for a strange bug that creeps up.

    Sometimes, when I click on a Item the GraphicsView turns white and the following error is shown several times in the debug window:

    QPainterPath::arcTo: Adding arc where a parameter is NaN, results are undefined

    The GraphicsView cannot be recovered by resizing, etc., only by restarting the game.

    I've created a MainWindow and with a QGraphicsView and a QGraphicsScene.

    I created 3 seperate QGraphicsItems

    1. A boardLayout which renders the background and does not handle click events.
    2. A Token Item that handles click events, the color of the token, if it's selected, etc.
    3. A BoardPosition Item that is invisible and handles the events when you click on an empty position on the board. Clicking this item causes the error described above.

    MainWindow Code:
    @
    ui->setupUi(this);
    this->setWindowIcon(QPixmap(QString(":/Images/icon2.jpeg")));

    showWin = new WinDialog(this);
    startWindow = new StartDialog(this);
    
    view = new QGraphicsView(this);
    this->setCentralWidget (view);
    
    view->setVerticalScrollBarPolicy (Qt::ScrollBarAlwaysOff);
    view->setHorizontalScrollBarPolicy (Qt::ScrollBarAlwaysOff);
    view->setMinimumSize (1000, 800);
    view->setViewportUpdateMode (QGraphicsView::FullViewportUpdate);
    view->setCacheMode (QGraphicsView::CacheNone);
    view->setRenderHints (QPainter::Antialiasing |  QPainter::TextAntialiasing);
    
    scene = NULL;
    
    //this->debugWidget = new DebugWidget(this);
    //this->debugWidget->setMinimumWidth (200);
    
    this->layout = NULL;
    this->controller = NULL;
    
    this->whiteTokensSet = 0;
    this->blackTokensSet = 0;
    

    }

    void MainWindow::Initalize()
    {
    scene = new QGraphicsScene();
    scene->setBackgroundBrush (QBrush(Qt::gray));
    view->setScene (scene);
    this->layout = new BoardLayout();
    scene->addItem(layout);

    float x = 0.081f;
    float y = 0.025f;
    for(int i = 0; i < 7; i++)
    {
        text.append(scene->addText(QString('A'+i)));
        text.at(i)->setX(x+(i*0.13));
        text.at(i)->setY(y - 0.008);
        text.at(i)->setScale(0.003);
    }
    x = 0.072f;
    for(int i = 7; i < 14; i++)
    {
        text.append(scene->addText(QString('1'+(i-7))));
        text.at(i)->setX(y);
        text.at(i)->setY(x+((i-7)*0.13));
        text.at(i)->setScale(0.003);
    }
    
    this->controller = new GameController(this);
    
    view->fitInView (layout, Qt::KeepAspectRatio);
    
    points[0] = QPointF(0.085f, 0.085f);
    points[1] = QPointF(0.475f, 0.085f);
    points[2] = QPointF(0.865f, 0.085f);
    points[3] = QPointF(0.215f, 0.215f);
    points[4] = QPointF(0.475f, 0.215f);
    points[5] = QPointF(0.735f, 0.215f);
    points[6] = QPointF(0.345f, 0.345f);
    points[7] = QPointF(0.475f, 0.345f);
    points[8] = QPointF(0.605f, 0.345f);
    points[9] = QPointF(0.085f, 0.475f);
    points[10] = QPointF(0.215f, 0.475f);
    points[11] = QPointF(0.345f, 0.475f);
    points[12] = QPointF(0.605f, 0.475f);
    points[13] = QPointF(0.735f, 0.475f);
    points[14] = QPointF(0.865f, 0.475f);
    points[15] = QPointF(0.345f, 0.605f);
    points[16] = QPointF(0.475f, 0.605f);
    points[17] = QPointF(0.605f, 0.605f);
    points[18] = QPointF(0.215f, 0.735f);
    points[19] = QPointF(0.475f, 0.735f);
    points[20] = QPointF(0.735f, 0.735f);
    points[21] = QPointF(0.085f, 0.865f);
    points[22] = QPointF(0.475f, 0.865f);
    points[23] = QPointF(0.865f, 0.865f);
    
    for(int i = 0; i < 24; i++)
    {
        boardPositions.append (new BoardPosition(i, points[i].x(), points[i].y(), this->controller));
        this->scene->addItem(boardPositions.at (i));
    }
    
    whiteTokensSet = 0;
    blackTokensSet = 0;
    
    for(int i = 0; i < 9; i++)
    {
        whiteTokens.append(new GameToken(WHITE, this->controller));
        whiteTokens.at(i)->setVisible(false);
        this->scene->addItem(whiteTokens.at(i));
        blackTokens.append(new GameToken(BLACK, this->controller));
        blackTokens.at(i)->setVisible(false);
        this->scene->addItem(blackTokens.at(i));
    }
    
    this->startWindow->close ();
    //this->debugWidget->appendText(QString("Welcome to Nine Men's Morris!"));
    //this->addDockWidget(Qt::LeftDockWidgetArea, this->debugWidget);
    this->show();
    this->resize(QSize(1001, 801));
    

    }
    @
    BoardPositions Code:
    @
    #include "boardposition.h"
    #include "gamecontroller.h"

    BoardPosition::BoardPosition(int pos, float coordx, float coordy, GameController *controller) :
    QGraphicsItem()
    {
    boardPos = pos;
    posx = coordx;
    posy = coordy;
    this->controller = controller;
    }

    QRectF BoardPosition::boundingRect() const
    {
    return QRectF(posx, posy, 0.05, 0.05);
    }

    void BoardPosition::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
    QWidget *widget)
    {
    painter->setPen(Qt::NoPen);
    painter->setBrush(Qt::transparent);

    painter->drawRect(QRectF(posx, posy, 0.05, 0.05));
    

    }

    void BoardPosition::mousePressEvent(QGraphicsSceneMouseEvent *event)
    {
    controller->boardClicked(boardPos);

    }
    @

    How could I debug this error, or did I do something entirely wrong?

    Please let me know if you need any other information. (You can cownload the whole code here: https://www.dropbox.com/s/osc7l2tyxf63qp6/nine-mens-morris-ff306f393749.zip )

    1 Reply Last reply
    0
    • K Offline
      K Offline
      koahnig
      wrote on last edited by
      #2

      welcome to devnet

      What OS, compiler, IDE, etc are you using?
      When you are running the application in the debugger, are you getting an exception?

      Vote the answer(s) that helped you to solve your issue(s)

      1 Reply Last reply
      0
      • K Offline
        K Offline
        kiepmad
        wrote on last edited by
        #3

        Thanks!

        I'm using Ubuntu 12.04 x64, Qt-Creator and the gcc that comes with latest ubuntu (4.6 I believe)

        However the same occurs when using Windows7 with Qt-Creator and Visual C++ compiler.

        I don't get any exceptions.

        1 Reply Last reply
        0
        • K Offline
          K Offline
          koahnig
          wrote on last edited by
          #4

          Since you do not get exceptions, how do you know that you are introducing nan then?

          Vote the answer(s) that helped you to solve your issue(s)

          1 Reply Last reply
          0

          • Login

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • Users
          • Groups
          • Search
          • Get Qt Extensions
          • Unsolved