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. Problem with QTabWidget::addTab() ?
Forum Updated to NodeBB v4.3 + New Features

Problem with QTabWidget::addTab() ?

Scheduled Pinned Locked Moved General and Desktop
14 Posts 3 Posters 5.1k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • ? This user is from outside of this forum
    ? This user is from outside of this forum
    Guest
    wrote on last edited by
    #5

    I got exception at 0x67b05545, code: 0xc0000005: read access violation at: 0x0, flags=0x0:

    QtGui4!ZN14QStackedWidget12insertWidgetEiP7QWidget:
    0x67b0553c <+0x0000> push ebp
    0x67b0553d <+0x0001> mov ebp,esp
    0x67b0553f <+0x0003> sub esp,8
    0x67b05542 <+0x0006> mov eax,dword ptr [ebp+8]
    here: 0x67b05545 <+0x0009> mov eax,dword ptr [eax+4]

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

      So you are indeed accessing something that's not pointing to the right place.

      Where do you check that parent 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
      • ? This user is from outside of this forum
        ? This user is from outside of this forum
        Guest
        wrote on last edited by
        #7

        I'm sure that the parent is valid, I've just tested now this code:
        @QMessageBox::information(0,0,tabrecapTab->objectName());
        test_addtab(tabrecapTab, "test");@
        when this code was executed: a messagebox containing the parent objectName was shown, but just after that the program crashs, but when removing the line of @test_addtab(tabrecapTab, "test");@ there is no crash.

        1 Reply Last reply
        0
        • M Offline
          M Offline
          MuldeR
          wrote on last edited by
          #8

          How where and how is tabrecapTab created? Any chance it is dangling?

          Anyway, just to be sure, edit your code like this:
          @void test_addtab(QTabWidget parent, QString tabname)
          {
          if(parent)
          {
          QWidget
          newtab = new QWidget(parent);
          parent->addTab(newtab, tabname);
          }
          else
          {
          qWarning("Parent is NULL !!!");
          }
          }@

          My OpenSource software at: http://muldersoft.com/

          Qt v4.8.6 MSVC 2013, static/shared: http://goo.gl/BXqhrS

          Go visit the coop: http://youtu.be/Jay...

          1 Reply Last reply
          0
          • ? This user is from outside of this forum
            ? This user is from outside of this forum
            Guest
            wrote on last edited by
            #9

            [quote author="MuldeR" date="1398632164"]How where and how is tabrecapTab created? Any chance it is dangling?

            Anyway, just to be sure, edit your code like this:
            @void test_addtab(QTabWidget parent, QString tabname)
            {
            if(parent)
            {
            QWidget
            newtab = new QWidget(parent);
            parent->addTab(newtab, tabname);
            }
            else
            {
            qWarning("Parent is NULL !!!");
            }
            }@[/quote]
            it's created using the ui designer, not programmatically.
            I tested if the parent is null, and I'm sure that isn't.

            1 Reply Last reply
            0
            • ? This user is from outside of this forum
              ? This user is from outside of this forum
              Guest
              wrote on last edited by
              #10

              [quote author="SGaist" date="1398631643"]So you are indeed accessing something that's not pointing to the right place.

              Where do you check that parent is valid ?[/quote]

              I"ve tested if the parent was really null using the code below:

              @ if (!tabrecapTab) QMessageBox::information(0,0,"invalid parent");
              test_addtab(tabrecapTab, "test");@
              but when the program runs: no "invalid parent" message was shown.
              so I'm sure that the parent is not null.

              1 Reply Last reply
              0
              • M Offline
                M Offline
                MuldeR
                wrote on last edited by
                #11

                [quote author="kaisbs" date="1398632357"]
                I tested if the parent is null, and I'm sure that isn't.[/quote]

                It still doesn't hurt to make your function safe for NULL pointers.

                Anyway, even a non-NULL pointer is not guaranteed to (still) be valid:

                http://en.wikipedia.org/wiki/Dangling_pointer

                __

                Also you should make a Debug build. When it crashes, find out where exactly in the code it crashes and why. Otherwise everything is speculation.

                My OpenSource software at: http://muldersoft.com/

                Qt v4.8.6 MSVC 2013, static/shared: http://goo.gl/BXqhrS

                Go visit the coop: http://youtu.be/Jay...

                1 Reply Last reply
                0
                • ? This user is from outside of this forum
                  ? This user is from outside of this forum
                  Guest
                  wrote on last edited by
                  #12

                  I understand now the cause of this crash: because the parent is QWidget that doesn't have the addTab method, and that I've used as @QTabWidget*@ by getting it via @getChild@ then casting it to @QTabWidget*@,
                  that was completely wrong, so my advice is : "never get widgets using getChild, instead use ui->widget".
                  I still have to tell you now: thank you so much for your appreciated help!

                  1 Reply Last reply
                  0
                  • M Offline
                    M Offline
                    MuldeR
                    wrote on last edited by
                    #13

                    Glad you fixed the problem.

                    Side note: If you ever have to cast a pointer from a base class to a derived class, like from QWidget to QTabWidget, it is inherently unsafe! If you have to do that, then, most of the time, you probably need to rethink the design of your code. But if you really cannot get around this, use dynamic_cast at least. And don't forget to check the result of the dynamic cast for NULL ;-)

                    http://en.wikipedia.org/wiki/Dynamic_cast

                    My OpenSource software at: http://muldersoft.com/

                    Qt v4.8.6 MSVC 2013, static/shared: http://goo.gl/BXqhrS

                    Go visit the coop: http://youtu.be/Jay...

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

                      For QObjects derived classes, you should use qobject_cast, if it fails for another reason than wrong "class name" then it will indicate that you are doing something funky somewhere.

                      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