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. Adding a virtual function causes strange result...
Forum Updated to NodeBB v4.3 + New Features

Adding a virtual function causes strange result...

Scheduled Pinned Locked Moved Solved General and Desktop
31 Posts 6 Posters 3.3k Views 2 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.
  • jsulmJ jsulm

    @SPlatten said in Adding a virtual function causes strange result...:

    how can I see if an error or exception has occurred because it isn't obvious

    You should see it in debugger.
    Please post the stack trace.

    SPlattenS Offline
    SPlattenS Offline
    SPlatten
    wrote on last edited by
    #7

    @jsulm :

                                                                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                                      
    1  QListData::size() const                                                                                                                                qlist.h                                                                                                             115  0x10000799f    
    2  QList<std::pair<QString, QString>>::length() const                                                                                                     qlist.h                                                                                                             360  0x100043265    
    3  clsXMLnode::strGetAttribute(QString)                                                                                                                   clsMainWnd.cpp                                                                                                      4281 0x100028276    
    4  clsQtLayout::addButton(QAbstractButton *, QString const&)                                                                                              clsQtLayout.cpp                                                                                                     149  0x10008ad47    
    5  clsXMLnode::setWidget(QWidget *)                                                                                                                       clsMainWnd.cpp                                                                                                      3860 0x10002b026    
    6  clsQtRadioButton::clsQtRadioButton(clsXMLnode *, QString *, QWidget *)                                                                                 clsQtRadionButton.cpp                                                                                               40   0x1000a6a8f    
    7  clsQtRadioButton::clsQtRadioButton(clsXMLnode *, QString *, QWidget *)                                                                                 clsQtRadionButton.cpp                                                                                               38   0x1000a993d    
    8  clsCNT::pCreate(clsXMLnode *, QString const&, QString&, QStringList&, QWidget *)                                                                       clsCNT.cpp                                                                                                          141  0x100005f59    
    9  clsXMLnode::clsXMLnode(QStringList&, clsXMLnode *)                                                                                                     clsMainWnd.cpp                                                                                                      766  0x1000232c9    
    10 clsXMLnode::clsXMLnode(QStringList&, clsXMLnode *)                                                                                                     clsMainWnd.cpp                                                                                                      545  0x10002ed35    
    11 clsScriptHelper::addNodesToGUI(clsXMLnode *, QLayout *, QJsonArray&, int *, int *)                                                                     clsScriptHelper.cpp                                                                                                 317  0x1000bf08b    
    12 clsScriptHelper::addNodesToGUI(clsXMLnode *, QLayout *, QJsonArray&, int *, int *)                                                                     clsScriptHelper.cpp                                                                                                 419  0x1000bfed7    
    13 clsScriptHelper::addNodesToGUI(clsXMLnode *, QLayout *, QJsonArray&, int *, int *)                                                                     clsScriptHelper.cpp                                                                                                 419  0x1000bfed7    
    14 clsScriptHelper::addGUIelement(QJsonObject const&)                                                                                                     clsScriptHelper.cpp                                                                                                 232  0x1000bd8c2    
    15 clsScriptHelper::qt_static_metacall(QObject *, QMetaObject::Call, int, void * *)                                                                       moc_clsScriptHelper.cpp                                                                                             216  0x1000dae2a    
    16 clsScriptHelper::qt_metacall(QMetaObject::Call, int, void * *)                                                                                         moc_clsScriptHelper.cpp                                                                                             303  0x1000db8dc    
    17 CallMethod(QQmlObjectOrGadget const&, int, int, int, int *, QV4::ExecutionEngine *, QV4::CallData *, QMetaObject::Call)                                qv4qobjectwrapper.cpp                                                                                               1301 0x1012bf559    
    18 CallPrecise(QQmlObjectOrGadget const&, QQmlPropertyData const&, QV4::ExecutionEngine *, QV4::CallData *, QMetaObject::Call)                            qv4qobjectwrapper.cpp                                                                                               1569 0x1012bb753    
    19 QV4::QObjectMethod::callInternal(QV4::Value const *, QV4::Value const *, int) const                                                                    qv4qobjectwrapper.cpp                                                                                               2131 0x1012bafda    
    20 QV4::FunctionObject::call(QV4::Value const *, QV4::Value const *, int) const                                                                           qv4functionobject_p.h                                                                                               202  0x1012e97bc    
    21 QV4::Runtime::CallProperty::call(QV4::ExecutionEngine *, QV4::Value const&, int, QV4::Value *, int)                                                    qv4runtime.cpp                                                                                                      1448 0x1012e9799    
    22 QV4::Moth::VME::interpret(QV4::CppStackFrame *, QV4::ExecutionEngine *, const char *)                                                                  qv4vme_moth.cpp                                                                                                     727  0x1012d56b0    
    23 QV4::Moth::VME::exec(QV4::CppStackFrame *, QV4::ExecutionEngine *)                                                                                     qv4vme_moth.cpp                                                                                                     463  0x1012d4542    
    24 QV4::ArrowFunction::virtualCall(QV4::FunctionObject const *, QV4::Value const *, QV4::Value const *, int)                                              qv4functionobject.cpp                                                                                               528  0x10127d8cf    
    25 QV4::FunctionObject::call(QV4::Value const *, QV4::Value const *, int) const                                                                           qv4functionobject_p.h                                                                                               202  0x1012e9578    
    26 QV4::Runtime::CallName::call(QV4::ExecutionEngine *, int, QV4::Value *, int)                                                                           qv4runtime.cpp                                                                                                      1406 0x1012e9562    
    27 QV4::Moth::VME::interpret(QV4::CppStackFrame *, QV4::ExecutionEngine *, const char *)                                                                  qv4vme_moth.cpp                                                                                                     766  0x1012d5c13    
    28 QV4::Moth::VME::exec(QV4::CppStackFrame *, QV4::ExecutionEngine *)                                                                                     qv4vme_moth.cpp                                                                                                     463  0x1012d4542    
    29 QV4::Function::call(QV4::Value const *, QV4::Value const *, int, QV4::ExecutionContext const *)                                                        qv4function.cpp                                                                                                     69   0x10127a985    
    30 QV4::Script::run(QV4::Value const *)                                                                                                                   qv4script.cpp                                                                                                       162  0x1012af6ca    
    31 QJSEngine::evaluate(QString const&, QString const&, int)                                                                                               qjsengine.cpp                                                                                                       545  0x101237d86    
    32 clsJSON::blnDecodeAccordingToType(QJsonObject const&, QTcpSocket *)                                                                                    clsJSON.cpp                                                                                                         377  0x10001859d    
    33 clsModule::manageReceivedData(QTcpSocket *)                                                                                                            clsModule.cpp                                                                                                       230  0x100069269    
    34 clsServer::onReadyRead()                                                                                                                               clsListener.cpp                                                                                                     84   0x10001b1e1    
    35 QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (clsServer:: *)()>::call(void (clsServer:: *)(), clsServer *, void * *) qobjectdefs_impl.h                                                                                                  152  0x10001d1ab    
    36 void QtPrivate::FunctionPointer<void (clsServer:: *)()>::call<QtPrivate::List<>, void>(void (clsServer:: *)(), clsServer *, void * *)                  qobjectdefs_impl.h                                                                                                  185  0x10001d11d    
    37 QtPrivate::QSlotObject<void (clsServer:: *)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void * *, bool *)          qobjectdefs_impl.h                                                                                                  418  0x10001d072    
    38 QObject::event(QEvent *)                                                                                                                               qobject.cpp                                                                                                         1314 0x10278bb9f    
    39 QApplicationPrivate::notify_helper(QObject *, QEvent *)                                                                                                qapplication.cpp                                                                                                    3632 0x100b8c9ea    
    40 QApplication::notify(QObject *, QEvent *)                                                                                                              qapplication.cpp                                                                                                         0x100b8de11    
    41 QCoreApplication::notifyInternal2(QObject *, QEvent *)                                                                                                 qcoreapplication.cpp                                                                                                1063 0x102760a34    
    42 QCoreApplication::sendEvent(QObject *, QEvent *)                                                                                                       qcoreapplication.cpp                                                                                                1458 0x102761d79    
    43 QCoreApplicationPrivate::sendPostedEvents(QObject *, int, QThreadData *)                                                                               qcoreapplication.cpp                                                                                                1817 0x102761d64    
    44 QCocoaEventDispatcherPrivate::processPostedEvents()                                                                                                    qcocoaeventdispatcher.mm                                                                                            904  0x102232259    
    45 QCocoaEventDispatcherPrivate::postedEventsSourceCallback(void *)                                                                                       qcocoaeventdispatcher.mm                                                                                            927  0x1022329c8    
    46 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__                                                                                             (x86_64h) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation                                  0x7ff8188138fd 
    47 __CFRunLoopDoSource0                                                                                                                                   (x86_64h) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation                                  0x7ff818813865 
    48 __CFRunLoopDoSources0                                                                                                                                  (x86_64h) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation                                  0x7ff8188135e4 
    49 __CFRunLoopRun                                                                                                                                         (x86_64h) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation                                  0x7ff81881201b 
    50 CFRunLoopRunSpecific                                                                                                                                   (x86_64h) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation                                  0x7ff8188115dd 
    51 RunCurrentEventLoopInMode                                                                                                                              (x86_64) /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox      0x7ff8214444f1 
    52 ReceiveNextEventCommon                                                                                                                                 (x86_64) /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox      0x7ff821444247 
    53 _BlockUntilNextEventMatchingListInModeWithFilter                                                                                                       (x86_64) /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox      0x7ff821443fe5 
    54 _DPSNextEvent                                                                                                                                          (x86_64) /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit                                                   0x7ff81b240b4c 
    55 -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]                                                                        (x86_64) /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit                                                   0x7ff81b23f1b8 
    56 -[NSApplication run]                                                                                                                                   (x86_64) /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit                                                   0x7ff81b2315a9 
    57 QCocoaEventDispatcher::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)                                                                            qcocoaeventdispatcher.mm                                                                                            437  0x10223162f    
    58 QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)                                                                                       qeventloop.cpp                                                                                                      139  0x10275cacf    
    59 QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>)                                                                                                qeventloop.cpp                                                                                                      232  0x10275caab    
    60 QCoreApplication::exec()                                                                                                                               qcoreapplication.cpp                                                                                                1371 0x102761042    
    61 main                                                                                                                                                   XMLMPAM.cpp                                                                                                         120  0x1000d3cf4    
    62 start                                                                                                                                                  (x86_64) /usr/lib/dyld                                                                                                   0x1002e94fe    
    

    Kind Regards,
    Sy

    jsulmJ 1 Reply Last reply
    0
    • J.HilkJ Offline
      J.HilkJ Offline
      J.Hilk
      Moderators
      wrote on last edited by
      #8

      this minimal example works like a charm:

      class clsXMLinterface {
      public:
          virtual QString strGetData();
      };
      
      QString clsXMLinterface::strGetData() {
          return "";
      }
      
      class clsQtLineEdit : public QLineEdit, public clsXMLinterface{
          Q_OBJECT
      
      public:
          clsQtLineEdit(QWidget*parent = nullptr) : QLineEdit(parent) {}
      
      public:
          QString strGetData() override {return text();}
      };
      
      int main(int argc, char *argv[])
      {
          QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
          QApplication app(argc, argv);
      
          clsQtLineEdit t;
          t.show();
      
      
      
          return app.exec();
      }
      #include "main.moc"
      
      

      Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


      Q: What's that?
      A: It's blue light.
      Q: What does it do?
      A: It turns blue.

      1 Reply Last reply
      0
      • SPlattenS SPlatten

        @jsulm :

                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                          
        1  QListData::size() const                                                                                                                                qlist.h                                                                                                             115  0x10000799f    
        2  QList<std::pair<QString, QString>>::length() const                                                                                                     qlist.h                                                                                                             360  0x100043265    
        3  clsXMLnode::strGetAttribute(QString)                                                                                                                   clsMainWnd.cpp                                                                                                      4281 0x100028276    
        4  clsQtLayout::addButton(QAbstractButton *, QString const&)                                                                                              clsQtLayout.cpp                                                                                                     149  0x10008ad47    
        5  clsXMLnode::setWidget(QWidget *)                                                                                                                       clsMainWnd.cpp                                                                                                      3860 0x10002b026    
        6  clsQtRadioButton::clsQtRadioButton(clsXMLnode *, QString *, QWidget *)                                                                                 clsQtRadionButton.cpp                                                                                               40   0x1000a6a8f    
        7  clsQtRadioButton::clsQtRadioButton(clsXMLnode *, QString *, QWidget *)                                                                                 clsQtRadionButton.cpp                                                                                               38   0x1000a993d    
        8  clsCNT::pCreate(clsXMLnode *, QString const&, QString&, QStringList&, QWidget *)                                                                       clsCNT.cpp                                                                                                          141  0x100005f59    
        9  clsXMLnode::clsXMLnode(QStringList&, clsXMLnode *)                                                                                                     clsMainWnd.cpp                                                                                                      766  0x1000232c9    
        10 clsXMLnode::clsXMLnode(QStringList&, clsXMLnode *)                                                                                                     clsMainWnd.cpp                                                                                                      545  0x10002ed35    
        11 clsScriptHelper::addNodesToGUI(clsXMLnode *, QLayout *, QJsonArray&, int *, int *)                                                                     clsScriptHelper.cpp                                                                                                 317  0x1000bf08b    
        12 clsScriptHelper::addNodesToGUI(clsXMLnode *, QLayout *, QJsonArray&, int *, int *)                                                                     clsScriptHelper.cpp                                                                                                 419  0x1000bfed7    
        13 clsScriptHelper::addNodesToGUI(clsXMLnode *, QLayout *, QJsonArray&, int *, int *)                                                                     clsScriptHelper.cpp                                                                                                 419  0x1000bfed7    
        14 clsScriptHelper::addGUIelement(QJsonObject const&)                                                                                                     clsScriptHelper.cpp                                                                                                 232  0x1000bd8c2    
        15 clsScriptHelper::qt_static_metacall(QObject *, QMetaObject::Call, int, void * *)                                                                       moc_clsScriptHelper.cpp                                                                                             216  0x1000dae2a    
        16 clsScriptHelper::qt_metacall(QMetaObject::Call, int, void * *)                                                                                         moc_clsScriptHelper.cpp                                                                                             303  0x1000db8dc    
        17 CallMethod(QQmlObjectOrGadget const&, int, int, int, int *, QV4::ExecutionEngine *, QV4::CallData *, QMetaObject::Call)                                qv4qobjectwrapper.cpp                                                                                               1301 0x1012bf559    
        18 CallPrecise(QQmlObjectOrGadget const&, QQmlPropertyData const&, QV4::ExecutionEngine *, QV4::CallData *, QMetaObject::Call)                            qv4qobjectwrapper.cpp                                                                                               1569 0x1012bb753    
        19 QV4::QObjectMethod::callInternal(QV4::Value const *, QV4::Value const *, int) const                                                                    qv4qobjectwrapper.cpp                                                                                               2131 0x1012bafda    
        20 QV4::FunctionObject::call(QV4::Value const *, QV4::Value const *, int) const                                                                           qv4functionobject_p.h                                                                                               202  0x1012e97bc    
        21 QV4::Runtime::CallProperty::call(QV4::ExecutionEngine *, QV4::Value const&, int, QV4::Value *, int)                                                    qv4runtime.cpp                                                                                                      1448 0x1012e9799    
        22 QV4::Moth::VME::interpret(QV4::CppStackFrame *, QV4::ExecutionEngine *, const char *)                                                                  qv4vme_moth.cpp                                                                                                     727  0x1012d56b0    
        23 QV4::Moth::VME::exec(QV4::CppStackFrame *, QV4::ExecutionEngine *)                                                                                     qv4vme_moth.cpp                                                                                                     463  0x1012d4542    
        24 QV4::ArrowFunction::virtualCall(QV4::FunctionObject const *, QV4::Value const *, QV4::Value const *, int)                                              qv4functionobject.cpp                                                                                               528  0x10127d8cf    
        25 QV4::FunctionObject::call(QV4::Value const *, QV4::Value const *, int) const                                                                           qv4functionobject_p.h                                                                                               202  0x1012e9578    
        26 QV4::Runtime::CallName::call(QV4::ExecutionEngine *, int, QV4::Value *, int)                                                                           qv4runtime.cpp                                                                                                      1406 0x1012e9562    
        27 QV4::Moth::VME::interpret(QV4::CppStackFrame *, QV4::ExecutionEngine *, const char *)                                                                  qv4vme_moth.cpp                                                                                                     766  0x1012d5c13    
        28 QV4::Moth::VME::exec(QV4::CppStackFrame *, QV4::ExecutionEngine *)                                                                                     qv4vme_moth.cpp                                                                                                     463  0x1012d4542    
        29 QV4::Function::call(QV4::Value const *, QV4::Value const *, int, QV4::ExecutionContext const *)                                                        qv4function.cpp                                                                                                     69   0x10127a985    
        30 QV4::Script::run(QV4::Value const *)                                                                                                                   qv4script.cpp                                                                                                       162  0x1012af6ca    
        31 QJSEngine::evaluate(QString const&, QString const&, int)                                                                                               qjsengine.cpp                                                                                                       545  0x101237d86    
        32 clsJSON::blnDecodeAccordingToType(QJsonObject const&, QTcpSocket *)                                                                                    clsJSON.cpp                                                                                                         377  0x10001859d    
        33 clsModule::manageReceivedData(QTcpSocket *)                                                                                                            clsModule.cpp                                                                                                       230  0x100069269    
        34 clsServer::onReadyRead()                                                                                                                               clsListener.cpp                                                                                                     84   0x10001b1e1    
        35 QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (clsServer:: *)()>::call(void (clsServer:: *)(), clsServer *, void * *) qobjectdefs_impl.h                                                                                                  152  0x10001d1ab    
        36 void QtPrivate::FunctionPointer<void (clsServer:: *)()>::call<QtPrivate::List<>, void>(void (clsServer:: *)(), clsServer *, void * *)                  qobjectdefs_impl.h                                                                                                  185  0x10001d11d    
        37 QtPrivate::QSlotObject<void (clsServer:: *)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void * *, bool *)          qobjectdefs_impl.h                                                                                                  418  0x10001d072    
        38 QObject::event(QEvent *)                                                                                                                               qobject.cpp                                                                                                         1314 0x10278bb9f    
        39 QApplicationPrivate::notify_helper(QObject *, QEvent *)                                                                                                qapplication.cpp                                                                                                    3632 0x100b8c9ea    
        40 QApplication::notify(QObject *, QEvent *)                                                                                                              qapplication.cpp                                                                                                         0x100b8de11    
        41 QCoreApplication::notifyInternal2(QObject *, QEvent *)                                                                                                 qcoreapplication.cpp                                                                                                1063 0x102760a34    
        42 QCoreApplication::sendEvent(QObject *, QEvent *)                                                                                                       qcoreapplication.cpp                                                                                                1458 0x102761d79    
        43 QCoreApplicationPrivate::sendPostedEvents(QObject *, int, QThreadData *)                                                                               qcoreapplication.cpp                                                                                                1817 0x102761d64    
        44 QCocoaEventDispatcherPrivate::processPostedEvents()                                                                                                    qcocoaeventdispatcher.mm                                                                                            904  0x102232259    
        45 QCocoaEventDispatcherPrivate::postedEventsSourceCallback(void *)                                                                                       qcocoaeventdispatcher.mm                                                                                            927  0x1022329c8    
        46 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__                                                                                             (x86_64h) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation                                  0x7ff8188138fd 
        47 __CFRunLoopDoSource0                                                                                                                                   (x86_64h) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation                                  0x7ff818813865 
        48 __CFRunLoopDoSources0                                                                                                                                  (x86_64h) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation                                  0x7ff8188135e4 
        49 __CFRunLoopRun                                                                                                                                         (x86_64h) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation                                  0x7ff81881201b 
        50 CFRunLoopRunSpecific                                                                                                                                   (x86_64h) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation                                  0x7ff8188115dd 
        51 RunCurrentEventLoopInMode                                                                                                                              (x86_64) /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox      0x7ff8214444f1 
        52 ReceiveNextEventCommon                                                                                                                                 (x86_64) /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox      0x7ff821444247 
        53 _BlockUntilNextEventMatchingListInModeWithFilter                                                                                                       (x86_64) /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox      0x7ff821443fe5 
        54 _DPSNextEvent                                                                                                                                          (x86_64) /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit                                                   0x7ff81b240b4c 
        55 -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]                                                                        (x86_64) /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit                                                   0x7ff81b23f1b8 
        56 -[NSApplication run]                                                                                                                                   (x86_64) /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit                                                   0x7ff81b2315a9 
        57 QCocoaEventDispatcher::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)                                                                            qcocoaeventdispatcher.mm                                                                                            437  0x10223162f    
        58 QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)                                                                                       qeventloop.cpp                                                                                                      139  0x10275cacf    
        59 QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>)                                                                                                qeventloop.cpp                                                                                                      232  0x10275caab    
        60 QCoreApplication::exec()                                                                                                                               qcoreapplication.cpp                                                                                                1371 0x102761042    
        61 main                                                                                                                                                   XMLMPAM.cpp                                                                                                         120  0x1000d3cf4    
        62 start                                                                                                                                                  (x86_64) /usr/lib/dyld                                                                                                   0x1002e94fe    
        
        jsulmJ Offline
        jsulmJ Offline
        jsulm
        Lifetime Qt Champion
        wrote on last edited by
        #9

        @SPlatten said in Adding a virtual function causes strange result...:

        clsXMLnode::strGetAttribute(QString)

        You should check what is happening there

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        SPlattenS 1 Reply Last reply
        0
        • jsulmJ jsulm

          @SPlatten said in Adding a virtual function causes strange result...:

          clsXMLnode::strGetAttribute(QString)

          You should check what is happening there

          SPlattenS Offline
          SPlattenS Offline
          SPlatten
          wrote on last edited by
          #10

          @jsulm , I didn't use the override keyword, should I?

          Kind Regards,
          Sy

          jsulmJ 1 Reply Last reply
          0
          • SPlattenS SPlatten

            @jsulm , this is where its called:

            QString clsScriptHelper::getValue(const QString& crstrID) {
                QString strValue;
                if ( crstrID.isEmpty() != true ) {
                    clsXMLnode* pobjNode(clsXMLnode::spobjGetNodeById(crstrID));
                    if ( pobjNode != nullptr ) {
                        clsXMLinterface* pobjXMLif(reinterpret_cast<clsXMLinterface*>(pobjNode));
                        if ( pobjXMLif != nullptr ) {
                            strValue = pobjXMLif->strGetData();
                        }
                    }
            
                }
                return strValue;
            }
            

            The prototype for the above:

            Q_INVOKABLE QString getValue(const QString& crstrID);
            

            There is presently only one call to this, the only overridden instance is defined in the class clsQtLineEdit.

            Execution stops as I stated on the line I specified in the original post, how can I see if an error or exception has occurred because it isn't obvious.

            J.HilkJ Offline
            J.HilkJ Offline
            J.Hilk
            Moderators
            wrote on last edited by J.Hilk
            #11

            @SPlatten said in Adding a virtual function causes strange result...:

            reinterpret_cast

            when using virtual inheritance !?!?!?

            use dynamic_cast or if QObject classes object_cast

            reinterpret_cast takes the raw pointer and considers it as being of the derived type. However, because of the virtual inheritance, a slight adjustment must be done to the pointer to point to the correct method dispatch table, and that's precisely what dynamic_cast will do.

            just as wrong, but probably wouldn't have resulted in a crash would be the use of static_cast.


            Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


            Q: What's that?
            A: It's blue light.
            Q: What does it do?
            A: It turns blue.

            SPlattenS 1 Reply Last reply
            3
            • SPlattenS SPlatten

              @jsulm , this is where its called:

              QString clsScriptHelper::getValue(const QString& crstrID) {
                  QString strValue;
                  if ( crstrID.isEmpty() != true ) {
                      clsXMLnode* pobjNode(clsXMLnode::spobjGetNodeById(crstrID));
                      if ( pobjNode != nullptr ) {
                          clsXMLinterface* pobjXMLif(reinterpret_cast<clsXMLinterface*>(pobjNode));
                          if ( pobjXMLif != nullptr ) {
                              strValue = pobjXMLif->strGetData();
                          }
                      }
              
                  }
                  return strValue;
              }
              

              The prototype for the above:

              Q_INVOKABLE QString getValue(const QString& crstrID);
              

              There is presently only one call to this, the only overridden instance is defined in the class clsQtLineEdit.

              Execution stops as I stated on the line I specified in the original post, how can I see if an error or exception has occurred because it isn't obvious.

              Christian EhrlicherC Offline
              Christian EhrlicherC Offline
              Christian Ehrlicher
              Lifetime Qt Champion
              wrote on last edited by
              #12
              This post is deleted!
              1 Reply Last reply
              0
              • J.HilkJ J.Hilk

                @SPlatten said in Adding a virtual function causes strange result...:

                reinterpret_cast

                when using virtual inheritance !?!?!?

                use dynamic_cast or if QObject classes object_cast

                reinterpret_cast takes the raw pointer and considers it as being of the derived type. However, because of the virtual inheritance, a slight adjustment must be done to the pointer to point to the correct method dispatch table, and that's precisely what dynamic_cast will do.

                just as wrong, but probably wouldn't have resulted in a crash would be the use of static_cast.

                SPlattenS Offline
                SPlattenS Offline
                SPlatten
                wrote on last edited by
                #13

                @J-Hilk said in Adding a virtual function causes strange result...:

                dynamic_cast

                I've replaced reinterpret_cast with dynamic_cast, same result.

                Kind Regards,
                Sy

                Christian EhrlicherC 1 Reply Last reply
                0
                • SPlattenS SPlatten

                  @jsulm , I didn't use the override keyword, should I?

                  jsulmJ Offline
                  jsulmJ Offline
                  jsulm
                  Lifetime Qt Champion
                  wrote on last edited by jsulm
                  #14

                  @SPlatten said in Adding a virtual function causes strange result...:

                  I didn't use the override keyword, should I?

                  Yes you should. To ask the compiler to check whether you're really overriding virtual method. Can help to detect bugs at compile time.

                  As I suggested: check what is happening in clsXMLnode::strGetAttribute(QString).
                  My guess is that the strGetData() method from base class is called which returns an empty string, so the code then fails later.

                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                  SPlattenS 1 Reply Last reply
                  0
                  • SPlattenS SPlatten

                    @J-Hilk said in Adding a virtual function causes strange result...:

                    dynamic_cast

                    I've replaced reinterpret_cast with dynamic_cast, same result.

                    Christian EhrlicherC Offline
                    Christian EhrlicherC Offline
                    Christian Ehrlicher
                    Lifetime Qt Champion
                    wrote on last edited by
                    #15

                    @SPlatten said in Adding a virtual function causes strange result...:

                    I've replaced reinterpret_cast with dynamic_cast, same result.

                    For sure not.

                    btw: dynamic_cast was proposed to your exact same problem some weeks ago already: https://forum.qt.io/topic/132420/how-to-access/4

                    SPlattenS 1 Reply Last reply
                    0
                    • jsulmJ jsulm

                      @SPlatten said in Adding a virtual function causes strange result...:

                      I didn't use the override keyword, should I?

                      Yes you should. To ask the compiler to check whether you're really overriding virtual method. Can help to detect bugs at compile time.

                      As I suggested: check what is happening in clsXMLnode::strGetAttribute(QString).
                      My guess is that the strGetData() method from base class is called which returns an empty string, so the code then fails later.

                      SPlattenS Offline
                      SPlattenS Offline
                      SPlatten
                      wrote on last edited by
                      #16

                      @jsulm, I have a breakpoint on the first line of the function getValue, execution doesn't get as far as the breakpoint before the issue occurs.

                      Kind Regards,
                      Sy

                      J.HilkJ jsulmJ 2 Replies Last reply
                      0
                      • Christian EhrlicherC Christian Ehrlicher

                        @SPlatten said in Adding a virtual function causes strange result...:

                        I've replaced reinterpret_cast with dynamic_cast, same result.

                        For sure not.

                        btw: dynamic_cast was proposed to your exact same problem some weeks ago already: https://forum.qt.io/topic/132420/how-to-access/4

                        SPlattenS Offline
                        SPlattenS Offline
                        SPlatten
                        wrote on last edited by SPlatten
                        #17

                        @Christian-Ehrlicher That issue was resolved, this is new and dynamic_cast wasn't used to resolve the last issue, it was resolved with the suggested qobject_cast.

                        Kind Regards,
                        Sy

                        Christian EhrlicherC 1 Reply Last reply
                        0
                        • SPlattenS SPlatten

                          @jsulm, I have a breakpoint on the first line of the function getValue, execution doesn't get as far as the breakpoint before the issue occurs.

                          J.HilkJ Offline
                          J.HilkJ Offline
                          J.Hilk
                          Moderators
                          wrote on last edited by
                          #18

                          @SPlatten your stack trace actually points to your clsXMLnode class.
                          clsXMLnode::strGetAttribute


                          Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                          Q: What's that?
                          A: It's blue light.
                          Q: What does it do?
                          A: It turns blue.

                          kshegunovK 1 Reply Last reply
                          1
                          • SPlattenS SPlatten

                            @jsulm, I have a breakpoint on the first line of the function getValue, execution doesn't get as far as the breakpoint before the issue occurs.

                            jsulmJ Offline
                            jsulmJ Offline
                            jsulm
                            Lifetime Qt Champion
                            wrote on last edited by jsulm
                            #19

                            @SPlatten I'm talking about clsXMLnode::strGetAttribute(QString).
                            If you check the stack trace you posted you will see that it is called shortly before the application stopps...

                            https://forum.qt.io/topic/113070/qt-code-of-conduct

                            1 Reply Last reply
                            2
                            • SPlattenS SPlatten

                              @Christian-Ehrlicher That issue was resolved, this is new and dynamic_cast wasn't used to resolve the last issue, it was resolved with the suggested qobject_cast.

                              Christian EhrlicherC Offline
                              Christian EhrlicherC Offline
                              Christian Ehrlicher
                              Lifetime Qt Champion
                              wrote on last edited by
                              #20

                              @SPlatten said in Adding a virtual function causes strange result...:

                              it was resolved with the suggested qobject_cast.

                              Since your class is derived from QObject you can also use qobject_cast. Please learn the basics.

                              SPlattenS 1 Reply Last reply
                              1
                              • Christian EhrlicherC Christian Ehrlicher

                                @SPlatten said in Adding a virtual function causes strange result...:

                                it was resolved with the suggested qobject_cast.

                                Since your class is derived from QObject you can also use qobject_cast. Please learn the basics.

                                SPlattenS Offline
                                SPlattenS Offline
                                SPlatten
                                wrote on last edited by
                                #21

                                @Christian-Ehrlicher , I find your additions very insulting, I’ve been coding professionally since 1986.

                                Kind Regards,
                                Sy

                                JonBJ Christian EhrlicherC 2 Replies Last reply
                                0
                                • SPlattenS SPlatten

                                  @Christian-Ehrlicher , I find your additions very insulting, I’ve been coding professionally since 1986.

                                  JonBJ Online
                                  JonBJ Online
                                  JonB
                                  wrote on last edited by JonB
                                  #22

                                  @SPlatten
                                  I'm not sure what part of your code you think is implicated. I see:

                                  1  QListData::size() const
                                  2  QList<std::pair<QString, QString>>::length() const 
                                  

                                  and that is failing (according to your "the execution stops in qlist.h on line 115") on trying to get the length of the QList. Invalid QList at that point? That is what I see?

                                  1 Reply Last reply
                                  0
                                  • SPlattenS SPlatten

                                    @Christian-Ehrlicher , I find your additions very insulting, I’ve been coding professionally since 1986.

                                    Christian EhrlicherC Offline
                                    Christian EhrlicherC Offline
                                    Christian Ehrlicher
                                    Lifetime Qt Champion
                                    wrote on last edited by
                                    #23

                                    @SPlatten said in Adding a virtual function causes strange result...:

                                    I’ve been coding professionally since 1986.

                                    But not with c++ (at least I hope so) - when I want to learn a new language I normally start to learn the basics. But you ignore those basics in nearly every 'problem' you have and then wonder why people complain about the lack of the basics.

                                    SPlattenS 1 Reply Last reply
                                    1
                                    • Christian EhrlicherC Christian Ehrlicher

                                      @SPlatten said in Adding a virtual function causes strange result...:

                                      I’ve been coding professionally since 1986.

                                      But not with c++ (at least I hope so) - when I want to learn a new language I normally start to learn the basics. But you ignore those basics in nearly every 'problem' you have and then wonder why people complain about the lack of the basics.

                                      SPlattenS Offline
                                      SPlattenS Offline
                                      SPlatten
                                      wrote on last edited by
                                      #24

                                      @Christian-Ehrlicher that’s a huge assumption on your part.

                                      Kind Regards,
                                      Sy

                                      1 Reply Last reply
                                      0
                                      • J.HilkJ J.Hilk

                                        @SPlatten your stack trace actually points to your clsXMLnode class.
                                        clsXMLnode::strGetAttribute

                                        kshegunovK Offline
                                        kshegunovK Offline
                                        kshegunov
                                        Moderators
                                        wrote on last edited by kshegunov
                                        #25

                                        @J-Hilk said in Adding a virtual function causes strange result...:

                                        @SPlatten your stack trace actually points to your clsXMLnode class.
                                        clsXMLnode::strGetAttribute

                                        If he reinterpret_casts it's going to point to that class and method since that's what to "reinterpret" means.

                                        @SPlatten said in Adding a virtual function causes strange result...:

                                        I've replaced reinterpret_cast with dynamic_cast, same result.

                                        You shouldn't use reinterpret_cast to begin with, as it's rather apparent you don't understand the implications of it; specifically to polymorphic calls and multiple inheritance. So while @Christian-Ehrlicher may seem brusque, you should do yourself a favor and listen to the advice.

                                        As for the issue at hand, you have called strGetAttribute on an invalid object, I'm reasonably certain. The reasons may vary, and reinterpret_casting incompatible types is one. Dangling pointers and uninitialized memory are other candidates. You need to sift through the debugger to find it. Out of curiosity where does clsQtLayout::addButton call clsXMLnode::strGetAttribute and where does clsXMLnode::setWidget call clsQtLayout::addButton - provide the relevant code around the calls.

                                        Read and abide by the Qt Code of Conduct

                                        SPlattenS 1 Reply Last reply
                                        3
                                        • kshegunovK kshegunov

                                          @J-Hilk said in Adding a virtual function causes strange result...:

                                          @SPlatten your stack trace actually points to your clsXMLnode class.
                                          clsXMLnode::strGetAttribute

                                          If he reinterpret_casts it's going to point to that class and method since that's what to "reinterpret" means.

                                          @SPlatten said in Adding a virtual function causes strange result...:

                                          I've replaced reinterpret_cast with dynamic_cast, same result.

                                          You shouldn't use reinterpret_cast to begin with, as it's rather apparent you don't understand the implications of it; specifically to polymorphic calls and multiple inheritance. So while @Christian-Ehrlicher may seem brusque, you should do yourself a favor and listen to the advice.

                                          As for the issue at hand, you have called strGetAttribute on an invalid object, I'm reasonably certain. The reasons may vary, and reinterpret_casting incompatible types is one. Dangling pointers and uninitialized memory are other candidates. You need to sift through the debugger to find it. Out of curiosity where does clsQtLayout::addButton call clsXMLnode::strGetAttribute and where does clsXMLnode::setWidget call clsQtLayout::addButton - provide the relevant code around the calls.

                                          SPlattenS Offline
                                          SPlattenS Offline
                                          SPlatten
                                          wrote on last edited by SPlatten
                                          #26

                                          @kshegunov , using the debugger I have a break point on the last if condition below:

                                          clsXMLinterface* pobjInterface(reinterpret_cast<clsXMLinterface*>(pobjButton));
                                          clsXMLnode* pobjNode(nullptr);
                                          if ( pobjInterface != nullptr ) {
                                              pobjNode = pobjInterface->pobjGetNode();
                                          }
                                          if ( pobjNode == nullptr ) {
                                              return;
                                          }
                                          

                                          pobjButton is a pointer to an instance of my derived class clsQtRadioButton:

                                              class clsQtRadioButton : public QRadioButton, public clsXMLinterface {
                                              Q_OBJECT
                                          

                                          pobjNode is returned as not null, pobjGetNode:

                                          clsXMLnode* pobjGetNode() { return mpobjNode; }
                                          

                                          I can see in the debugger the pobjInterface looks ok and mpobjNode is correct as I have assigned a human readable description to it:
                                          Screenshot 2021-12-22 at 07.41.17.png
                                          However pobjNode doesn't appear to be correct:
                                          Screenshot 2021-12-22 at 07.42.40.png
                                          And then trying to call strGetAttribute fails and causes the problem, but its because pobjNode isn't correct, why ?
                                          If I change the code to:

                                          clsQtRadioButton* pobjRadioBtn(qobject_cast<clsQtRadioButton*>(pobjButton));
                                          clsXMLnode* pobjNode(pobjRadioBtn->pobjGetNode());
                                          

                                          This way pobjNode is valid and there is no problem, however I need a polymorphic way to access pobjGetNode because there can be lots of different types of object derived from the same base class and I need the functionality to work for all of them.

                                          Kind Regards,
                                          Sy

                                          jsulmJ 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