Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-38318

QtGraphics View Scene LineItem division by zero occurs.

    XMLWordPrintable

Details

    • Bug
    • Resolution: Unresolved
    • Not Evaluated
    • None
    • 4.8.1
    • GUI: Painting
    • None
    • Linux nightik-laptop 3.2.0-60-generic-pae #91-Ubuntu SMP Wed Feb 19 04:14:56 UTC 2014 i686 i686 i386 GNU/Linux

    Description

      The program is written using Qt 4.8.1
      In this program, in Qt libraries, occurs division by zero. To call it, you need to resize the window.

      The program works with arithmetic coprocessor's exceptions turned on: feenableexcept(FE_DIVBYZERO|FE_INVALID|FE_OVERFLOW|FE_UNDERFLOW);
      Also, here is handler for signal SIGFPE to find out causes of exception.

      Classes used: QGraphicsView, QGraphicsScene, QGraphicsLineItem.
      One line is placed on the scene. Line's coordinates should change when resizing the window, which happens in ( paintscene.cpp:59 ).

      Main window created in Qt Creator 2.4.1

      Also, I'd like to point out that enabling exceptions are before QApplication a(argc, argv) leads to floating point underflow.

      Called functions are printed on-screen, line coordinates too, program terminates while drawing it.

      user@laptop:~/job/sem6/2d/test3$ ./task
      mainwindow.cpp:34 event resizeEvent()
      paintscene.cpp:43 call rePrint()
      paintscene.cpp:57 line: P1=(1,700000e+01,5,000000e-02) P2=(2,200000e+01,1,000000e-01)
      mainwindow.cpp:34 event resizeEvent()
      paintscene.cpp:43 call rePrint()
      paintscene.cpp:57 line: P1=(1,000000e+00,5,000000e-02) P2=(5,570000e+01,1,000000e-01)
      FPE_FLTDIV <----- divide by zero

      Original russian text:

      Программа написана на Qt 4.8.1
      В этой программе,в библиотеках Qt, происходит деление на ноль. Что бы вызвать деление на ноль нужно изменить размер окна.

      эта программа работает с включенными исключениями арифметического сопроцессора: feenableexcept(FE_DIVBYZERO|FE_INVALID|FE_OVERFLOW|FE_UNDERFLOW)
      так же здесь выставлен обработчик для сигнала SIGFPE для уточнения причины возникновения исключения.

      в этой программе используются классы QGraphicsView, QGraphicsScene, QGraphicsLineItem.
      на сцену помещается одна линия. При изменении размера окна координаты этой линии должны меняться. При изменении размера окна
      изменяются координаты линии( paintscene.cpp:59 ).
      главное окно было сделано в Qt Creator 2.4.1
      имена вызываемых функций выводятся на экран, а так же выводится координаты линии, при отрисовке которой программа падает.
      так же хочу отметить, что если включение исключений поставить перед QApplication a(argc, argv), то будет floating point underflow

      trace:

      Program received signal SIGFPE, Arithmetic exception.
      0xb77e820e in ?? () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      (gdb) bt
      #0 0xb77e820e in ?? () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #1 0xb7829bbc in ?? () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #2 0xb7791897 in QPaintEngineEx::drawLines(QLineF const*, int) () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #3 0xb782b02e in ?? () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #4 0xb77a278e in QPainter::drawLines(QLineF const*, int) () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #5 0xb7ca628d in QGraphicsLineItem::paint(QPainter*, QStyleOptionGraphicsItem const*, QWidget*) () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #6 0xb7ceaa4f in ?? () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #7 0xb7ceb60f in ?? () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #8 0xb7cebeaf in ?? () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #9 0xb7d083b0 in QGraphicsView::paintEvent(QPaintEvent*) () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #10 0xb7685152 in QWidget::event(QEvent*) () from /usr/lib/i386-linux-gnu/libQtGui.so.4

      #11 0xb7aa2ea5 in QFrame::event(QEvent*) () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #12 0xb7b35b01 in QAbstractScrollArea::viewportEvent(QEvent*) () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #13 0xb7d096fc in QGraphicsView::viewportEvent(QEvent*) () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #14 0xb7b38226 in ?? () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #15 0xb738fb16 in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) () from /usr/lib/i386-linux-gnu/libQtCore.so.4
      #16 0xb762aea2 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #17 0xb76303a2 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #18 0xb738f97e in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/i386-linux-gnu/libQtCore.so.4
      #19 0xb7680ada in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) ()
      from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #20 0xb7681882 in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, int, QPainte
      #21 0xb7680838 in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) ()
      from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #22 0xb7681882 in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, int, QPainte
      #23 0xb7680838 in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) ()
      from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #24 0xb7681882 in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, int, QPainte
      #25 0xb76815ba in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, int, QPainte
      #26 0xb7680838 in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) ()
      from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #27 0xb7879e10 in ?? () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #28 0xb76769db in QWidgetPrivate::syncBackingStore() () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #29 0xb76a6c30 in ?? () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #30 0xb76b6d35 in QApplication::x11ProcessEvent(_XEvent*) () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #31 0xb76e3efc in ?? () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      --Type <return> to continue, or q <return> to quit--
      #32 0xb6e1dd46 in g_main_context_dispatch () from /lib/i386-linux-gnu/libglib-2.0.so.0
      #33 0xb6e1e0e5 in ?? () from /lib/i386-linux-gnu/libglib-2.0.so.0
      #34 0xb6e1e1c1 in g_main_context_iteration () from /lib/i386-linux-gnu/libglib-2.0.so.0
      #35 0xb73c2887 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/i386-linux-gnu/libQtCore.so.4
      #36 0xb76e3afa in ?? () from /usr/lib/i386-linux-gnu/libQtGui.so.4

      #37 0xb738e50d in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/i386-linux-gnu/libQtCore.so.4
      #38 0xb738e7a9 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/i386-linux-gnu/libQtCore.so.4
      #39 0xb7393eba in QCoreApplication::exec() () from /usr/lib/i386-linux-gnu/libQtCore.so.4
      #40 0xb7628a74 in QApplication::exec() () from /usr/lib/i386-linux-gnu/libQtGui.so.4
      #41 0x0804b9b1 in main (argc=1, argv=0xbffff2e4) at main.cpp:54

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            sletta Gunnar Sletta
            nightik nightik
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:

              Gerrit Reviews

                There are no open Gerrit changes