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. QGraphicsView class crashes the application
QtWS25 Last Chance

QGraphicsView class crashes the application

Scheduled Pinned Locked Moved General and Desktop
17 Posts 3 Posters 4.4k Views
  • 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.
  • V Offline
    V Offline
    venkatesh
    wrote on last edited by
    #1

    Hi,
    I created a class and promoted my QGraphicsView to the class. But the application crashes.When its executed. I am not sure whats the problem behind it.

    My code

    @

    #STATIONARY IMAGE VIEWER.CPP

    #include "stationaryimageviewer.h"
    #include"QtGui"
    #include"QFileInfo"
    #include"QVariant"
    #include"QString"

    StationaryImageViewer::StationaryImageViewer(QWidget *parent) :
    QGraphicsView(parent)
    {

    }

    void StationaryImageViewer::setStationaryImage_()
    {

    StationaryImageQListItem_ = listWidgetViewerObject.currentItem();
    QVariant StationaryImageData_=StationaryImageQListItem_->data(Qt::UserRole);
    QString StationaryData_=StationaryImageData_.toString();
    QFileInfo StationaryImageInfo_(StationaryData_);
    StationaryImageFilePath_= StationaryImageInfo_.absoluteFilePath();
    StationaryImagePixmap_.load(StationaryImageFilePath_);
    StationaryImageViewItem_->setPixmap(StationaryImagePixmap_);
    StationaryImageScene_->addItem(StationaryImageViewItem_);
    fitInView(StationaryImageScene_->itemsBoundingRect(),Qt::IgnoreAspectRatio);
    setScene(StationaryImageScene_);
    show();
    update();
    

    }

    @

    #STATIONARY IMAGE VIEWER.H

    @

    #ifndef STATIONARYIMAGEVIEWER_H
    #define STATIONARYIMAGEVIEWER_H

    #include <QWidget>
    #include<QGraphicsView>
    #include<QPixmap>
    #include<QGraphicsPixmapItem>
    #include"listWidget.h"
    #include<QListWidget>
    class QWidget;

    class StationaryImageViewer : public QGraphicsView
    {
    Q_OBJECT
    public:
    explicit StationaryImageViewer(QWidget *parent = 0);

    QGraphicsScene *StationaryImageScene_=new QGraphicsScene();
    QGraphicsPixmapItem *StationaryImageViewItem_=new QGraphicsPixmapItem();
    QListWidgetItem *StationaryImageQListItem_=new QListWidgetItem();
    QPixmap StationaryImagePixmap_;
    QString StationaryImageFilePath_;
    
    listWidget listWidgetViewerObject;
    

    signals:

    public slots:
    void setStationaryImage_();

    };

    #endif // STATIONARYIMAGEVIEWER_H

    @

    #IMAGEREGISTRATION IMPLEMENTATION.H

    @

    ImageRegistration::ImageRegistration(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ImageRegistration)
    {

    ui->setupUi(this);
    ui->ExportTransformationMatrix->setStyleSheet("border-style:inset");
    ui->ExportTransformationMatrix->setStyleSheet("border-width: 2px");
    
    
    ui->ManualRegistrationView->setStyleSheet(" border: 2px solid rgb(130,170,245)");
    ui->StationaryImageView->setStyleSheet(" border: 2px solid rgb(130,170,245)");
    ui->MovingImageView->setStyleSheet("border: 2px solid rgb(130,170,245)");
    ui->ZoomImage->setStyleSheet("border: 2px solid black ");
    
    connect(ui->ZoomImage,SIGNAL(valueChanged(int)),this,SLOT(updateTransform()));
    connect(ui->RotateImage,SIGNAL(valueChanged(int)),this,SLOT(updateTransform()));
    connect(ui->ImportImages,SIGNAL(clicked()),&listObject_, SLOT(setData_()));
    listObject_.show();
    connect(ui->ImageList,SIGNAL(itemDoubleClicked(QListWidgetItem*)),&StationaryImageObject_,SLOT(setStationaryImage_()));
    StationaryImageObject_.show();
    

    }

    @
    I am trying to figure out my mistake. Would be helpful to have some suggestions.

    1 Reply Last reply
    0
    • raven-worxR Offline
      raven-worxR Offline
      raven-worx
      Moderators
      wrote on last edited by
      #2

      and where does it crash?

      --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
      If you have a question please use the forum so others can benefit from the solution in the future

      1 Reply Last reply
      0
      • V Offline
        V Offline
        venkatesh
        wrote on last edited by
        #3

        When i double click the image list item

        1 Reply Last reply
        0
        • raven-worxR Offline
          raven-worxR Offline
          raven-worx
          Moderators
          wrote on last edited by
          #4

          i asked "where" not "when".
          Start your application with a debugger (e.g. QtCreator in debug mode) and it will show you the position in the code.

          --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
          If you have a question please use the forum so others can benefit from the solution in the future

          1 Reply Last reply
          0
          • V Offline
            V Offline
            venkatesh
            wrote on last edited by
            #5

            Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
            0 com.yourcompany.ImageRegistration 0x0000000100056b3a StationaryImageViewer::setStationaryImage_() + 42 (stationaryimageviewer.cpp:18)
            1 com.yourcompany.ImageRegistration 0x0000000100058052 StationaryImageViewer::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) + 130 (moc_stationaryimageviewer.cpp:48)
            2 QtCore 0x0000000101b8d09e QMetaObject::activate(QObject*, QMetaObject const*, int, void**) + 1566
            3 QtGui 0x000000010134c3b1 QListWidget::itemDoubleClicked(QListWidgetItem*) + 49
            4 QtCore 0x0000000101b8d09e QMetaObject::activate(QObject*, QMetaObject const*, int, void**) + 1566
            5 QtGui 0x00000001012d90e9 QAbstractItemView::doubleClicked(QModelIndex const&) + 41
            6 QtGui 0x00000001012db205 QAbstractItemView::mouseDoubleClickEvent(QMouseEvent*) + 277
            7 QtGui 0x0000000100e34481 QWidget::event(QEvent*) + 2449
            8 QtGui 0x00000001011c60ac QFrame::event(QEvent*) + 44
            9 QtGui 0x00000001012526e7 QAbstractScrollArea::viewportEvent(QEvent*) + 23
            10 QtGui 0x00000001012e78cb QAbstractItemView::viewportEvent(QEvent*) + 427
            11 QtGui 0x0000000101254a70 QAbstractScrollAreaFilter::eventFilter(QObject*, QEvent*) + 48
            12 QtCore 0x0000000101b74687 QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) + 151
            13 QtGui 0x0000000100dd95be QApplicationPrivate::notify_helper(QObject*, QEvent*) + 142
            14 QtGui 0x0000000100de0190 QApplication::notify(QObject*, QEvent*) + 2384
            15 QtCore 0x0000000101b74bdc QCoreApplication::notifyInternal(QObject*, QEvent*) + 124
            16 QtGui 0x0000000100dddbdd QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) + 333
            17 QtGui 0x0000000100d8d6cb qt_mac_handleMouseEvent(NSEvent*, QEvent::Type, Qt::MouseButton, QWidget*, bool) + 763
            18 com.apple.AppKit 0x00007fff8b01c50e -[NSWindow sendEvent:] + 6853
            19 QtGui 0x0000000100d827d7 -[QCocoaWindow sendEvent:] + 87
            20 com.apple.AppKit 0x00007fff8b018644 -[NSApplication sendEvent:] + 5761
            21 QtGui 0x0000000100d87814 -[QNSApplication sendEvent:] + 84
            22 com.apple.AppKit 0x00007fff8af2e21a -[NSApplication run] + 636
            23 QtGui 0x0000000100d92680 QEventDispatcherMac::processEvents(QFlagsQEventLoop::ProcessEventsFlag) + 1824
            24 QtCore 0x0000000101b73af4 QEventLoop::processEvents(QFlagsQEventLoop::ProcessEventsFlag) + 68
            25 QtCore 0x0000000101b73ea4 QEventLoop::exec(QFlagsQEventLoop::ProcessEventsFlag) + 324
            26 QtCore 0x0000000101b7658c QCoreApplication::exec() + 188
            27 com.yourcompany.ImageRegistration 0x0000000100002375 main + 101 (main.cpp:12)
            28 com.yourcompany.ImageRegistration 0x00000001000022cd _start + 203
            29 com.yourcompany.ImageRegistration 0x0000000100002201 start + 33

            Thread 1:
            0 libsystem_kernel.dylib 0x00007fff92e3d6d6 __workq_kernreturn + 10
            1 libsystem_c.dylib 0x00007fff8a7c5f1c _pthread_workq_return + 25
            2 libsystem_c.dylib 0x00007fff8a7c5ce3 _pthread_wqthread + 412
            3 libsystem_c.dylib 0x00007fff8a7b0191 start_wqthread + 13

            Thread 2:: Dispatch queue: com.apple.libdispatch-manager
            0 libsystem_kernel.dylib 0x00007fff92e3dd16 kevent + 10
            1 libdispatch.dylib 0x00007fff93c60dea _dispatch_mgr_invoke + 883
            2 libdispatch.dylib 0x00007fff93c609ee _dispatch_mgr_thread + 54

            Thread 3:
            0 libsystem_kernel.dylib 0x00007fff92e3d6d6 __workq_kernreturn + 10
            1 libsystem_c.dylib 0x00007fff8a7c5f1c _pthread_workq_return + 25
            2 libsystem_c.dylib 0x00007fff8a7c5ce3 _pthread_wqthread + 412
            3 libsystem_c.dylib 0x00007fff8a7b0191 start_wqthread + 13

            Thread 4:
            0 libsystem_kernel.dylib 0x00007fff92e3d6d6 __workq_kernreturn + 10
            1 libsystem_c.dylib 0x00007fff8a7c5f1c _pthread_workq_return + 25
            2 libsystem_c.dylib 0x00007fff8a7c5ce3 _pthread_wqthread + 412
            3 libsystem_c.dylib 0x00007fff8a7b0191 start_wqthread + 13

            Thread 5:
            0 libsystem_kernel.dylib 0x00007fff92e3d6d6 __workq_kernreturn + 10
            1 libsystem_c.dylib 0x00007fff8a7c5f1c _pthread_workq_return + 25
            2 libsystem_c.dylib 0x00007fff8a7c5ce3 _pthread_wqthread + 412
            3 libsystem_c.dylib 0x00007fff8a7b0191 start_wqthread + 13

            Thread 6:
            0 libsystem_kernel.dylib 0x00007fff92e3d6d6 __workq_kernreturn + 10
            1 libsystem_c.dylib 0x00007fff8a7c5f1c _pthread_workq_return + 25
            2 libsystem_c.dylib 0x00007fff8a7c5ce3 _pthread_wqthread + 412
            3 libsystem_c.dylib 0x00007fff8a7b0191 start_wqthread + 13

            Thread 7:
            0 libsystem_kernel.dylib 0x00007fff92e3d6d6 __workq_kernreturn + 10
            1 libsystem_c.dylib 0x00007fff8a7c5f1c _pthread_workq_return + 25
            2 libsystem_c.dylib 0x00007fff8a7c5ce3 _pthread_wqthread + 412
            3 libsystem_c.dylib 0x00007fff8a7b0191 start_wqthread + 13

            1 Reply Last reply
            0
            • V Offline
              V Offline
              venkatesh
              wrote on last edited by
              #6

              I have posted the implementation again for clarity in lines

              @
              #include "stationaryimageviewer.h"
              #include"QtGui"
              #include"QFileInfo"
              #include"QVariant"
              #include"QString"

              StationaryImageViewer::StationaryImageViewer(QWidget *parent) :
              QGraphicsView(parent)
              {

              }

              void StationaryImageViewer::setStationaryImage_()
              {

              StationaryImageQListItem_ =listWidgetViewerObject.currentItem();
              QVariant StationaryImageData_=StationaryImageQListItem_->data(Qt::UserRole);
              QString StationaryData_=StationaryImageData_.toString();
              QFileInfo StationaryImageInfo_(StationaryData_);
              StationaryImageFilePath_= StationaryImageInfo_.absoluteFilePath();
              StationaryImagePixmap_.load(StationaryImageFilePath_);
              StationaryImageViewItem_->setPixmap(StationaryImagePixmap_);
              StationaryImageScene_->addItem(StationaryImageViewItem_);
              fitInView(StationaryImageScene_->itemsBoundingRect(),Qt::IgnoreAspectRatio);
              setScene(StationaryImageScene_);
              show();
              update();
              

              }
              @

              1 Reply Last reply
              0
              • raven-worxR Offline
                raven-worxR Offline
                raven-worx
                Moderators
                wrote on last edited by
                #7

                where is this variable initialized? StationaryImageObject_

                --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
                If you have a question please use the forum so others can benefit from the solution in the future

                1 Reply Last reply
                0
                • V Offline
                  V Offline
                  venkatesh
                  wrote on last edited by
                  #8

                  Its initialised at the header in ImageRegistrationImplementation.h

                  @

                  private:

                  listWidget listObject_;
                  StationaryImageViewer StationaryImageObject_;
                  MovingImageViewer MovingImageObject_;

                  @

                  1 Reply Last reply
                  0
                  • V Offline
                    V Offline
                    venkatesh
                    wrote on last edited by
                    #9

                    I could understand the program crashes at the line

                    @

                    QVariant StationaryImageData_=StationaryImageQListItem_->data(Qt::UserRole);

                    @

                    But i don't know why

                    1 Reply Last reply
                    0
                    • SGaistS Offline
                      SGaistS Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on last edited by
                      #10

                      Hi,

                      Are you sure StationaryImageQListItem_ is valid ?

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      0
                      • V Offline
                        V Offline
                        venkatesh
                        wrote on last edited by
                        #11

                        Hi,
                        I have used an object created from a class listWidget

                        @
                        listWidget listWidgetViewerObject;
                        @

                        to get the current item of the listWidget using

                        @

                        StationaryImageQListItem_ =listWidgetViewerObject.currentItem();
                        

                        @

                        and used it in QVariant. I don't understand what's going wrong here

                        1 Reply Last reply
                        0
                        • SGaistS Offline
                          SGaistS Offline
                          SGaist
                          Lifetime Qt Champion
                          wrote on last edited by
                          #12

                          Again, are you sure that StationaryImageQListItem_ is pointing to a valid item ?

                          Interested in AI ? www.idiap.ch
                          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                          1 Reply Last reply
                          0
                          • V Offline
                            V Offline
                            venkatesh
                            wrote on last edited by
                            #13

                            I tried to reimplement it in another way as

                            listWidget.cpp

                            @

                            QString listWidget::ConvertMovingData_()
                            {
                            QVariant MovingImageData_=item(currentRow()+1)->data(Qt::UserRole);
                            QString MovingData_=MovingImageData_.toString();
                            QFileInfo MovingImageInfo_(MovingData_);
                            QString MovingImageFilePath_= MovingImageInfo_.absoluteFilePath();
                            return MovingImageFilePath_;

                            }

                            QString listWidget::ConvertStationaryData_()
                            {
                            QVariant StationaryImageData_=currentItem()->data(Qt::UserRole);
                            QString StationaryData_=StationaryImageData_.toString();
                            QFileInfo StationaryImageInfo_(StationaryData_);
                            QString StationaryImageFilePath_= StationaryImageInfo_.absoluteFilePath();
                            return StationaryImageFilePath_;

                            }

                            @

                            listWidget.h

                            @
                            public slots:
                            QString ConvertMovingData_();
                            QString ConvertStationaryData_();
                            @

                            And i used it in

                            movingimageviewer.cpp

                            @

                            void MovingImageViewer::setMovingImage_()
                            {
                            MovingImageScene_->removeItem(MovingImageViewItem_);
                            MovingImageScene_->clear();
                            QString MovingStringData=listWidgetMovingViewerObject.ConvertMovingData_();
                            MovingImagePixmap_.load(MovingStringData);
                            MovingImageViewItem_->setPixmap(MovingImagePixmap_);
                            MovingImageScene_->addItem(MovingImageViewItem_);
                            fitInView(MovingImageScene_->itemsBoundingRect(),Qt::IgnoreAspectRatio);
                            setScene(MovingImageScene_);
                            show();
                            update();
                            }
                            @

                            similarly in

                            @

                            void StationaryImageViewer::setStationaryImage_()
                            {

                            StationaryImageScene_->removeItem(StationaryImageViewItem_);
                            StationaryImageScene_->clear();
                            QString StationaryStringData= listWidgetStationaryObject.ConvertStationaryData_();
                            StationaryImagePixmap_.load(StationaryStringData);
                            StationaryImageViewItem_->setPixmap(StationaryImagePixmap_);
                            StationaryImageScene_->addItem(StationaryImageViewItem_);
                            fitInView(StationaryImageScene_->itemsBoundingRect(),Qt::IgnoreAspectRatio);
                            setScene(StationaryImageScene_);
                            show();
                            update();
                            

                            }

                            @

                            1 Reply Last reply
                            0
                            • V Offline
                              V Offline
                              venkatesh
                              wrote on last edited by
                              #14

                              This is the crash report for this implementation

                              Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
                              0 com.yourcompany.ImageRegistration 0x0000000100055d4f listWidget::ConvertStationaryData_() + 31 (listWidget.cpp:58)
                              1 com.yourcompany.ImageRegistration 0x0000000100056a44 StationaryImageViewer::setStationaryImage_() + 68 (stationaryimageviewer.cpp:21)

                              which again corresponds to the @QVariant@ implementation

                              1 Reply Last reply
                              0
                              • SGaistS Offline
                                SGaistS Offline
                                SGaist
                                Lifetime Qt Champion
                                wrote on last edited by
                                #15

                                You still don't check whether the return value of currentItem() is valid

                                Interested in AI ? www.idiap.ch
                                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                1 Reply Last reply
                                0
                                • V Offline
                                  V Offline
                                  venkatesh
                                  wrote on last edited by
                                  #16

                                  Hi,

                                  How can I check whether it is valid ?? I thought it should be valid, as I am just taking the data of the item which is clicked in listWidget. Is there a way to check In Qt, like catching an exception ? Or error

                                  1 Reply Last reply
                                  0
                                  • SGaistS Offline
                                    SGaistS Offline
                                    SGaist
                                    Lifetime Qt Champion
                                    wrote on last edited by
                                    #17

                                    Just test if the pointer is null

                                    Interested in AI ? www.idiap.ch
                                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                    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