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. [SOLVED] [Class Inheritance] Need tips on creating a hierarchic class structure
Forum Updated to NodeBB v4.3 + New Features

[SOLVED] [Class Inheritance] Need tips on creating a hierarchic class structure

Scheduled Pinned Locked Moved General and Desktop
12 Posts 3 Posters 6.4k 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.
  • L Offline
    L Offline
    loladiro
    wrote on last edited by
    #2

    I guess your testroot inherits QWidget? In that case it has to have a similar constructor to your CQp class and you have to call that constructor.

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

      You guessed right, but I don't understand what you mean.

      Joey Dumont

      1 Reply Last reply
      0
      • L Offline
        L Offline
        loladiro
        wrote on last edited by
        #4

        @
        class testroot : public QWidget
        {
        Q_OBJECT
        public:
        testroot(QWidget *parent = 0) : QWidget(parent)
        {}
        }

        CQp::CQp(QWidget *parent) :
        testroot(parent)
        {
        }
        @

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

          Thanks!

          Do you have any good reference book that talks about this kind of inheritance? My code now compiles, but I haven't the slightest idea why. I read about inheritance before, but it's always demonstrated in simple cases, and rarely with abstract classes.

          Thanks, @loladiro!

          Joey Dumont

          1 Reply Last reply
          0
          • D Offline
            D Offline
            dangelog
            wrote on last edited by
            #6

            [quote author="Joey Dumont" date="1308751406"]
            and when I try to compile, it complains that 'QWidget' is not a direct base of CQp. True. But I if make it a parent class to CQp explicitly, it complains that class CQp inherits QWidget from two places. Is there a way around that?[/quote]

            What the compiler is telling you is that from a constructor you can call only direct base constructors.

            That is, if you have an inheritance chain like this
            @
            A --> B --> C
            @
            (C inherits from B, B from A) then from C::C() you can call B::B(), but not A::A(), because it's not a direct base for C.

            The offending line is obviously the call to the QWidget ctor here, since "testcase" is a direct base for CQp, and QWidget is a non-direct base:

            [quote author="Joey Dumont" date="1308751406"]
            @#include "cqp.h"

            CQp::CQp(QWidget *parent) :
            QWidget(parent)
            {
            }
            @
            [/quote]

            Software Engineer
            KDAB (UK) Ltd., a KDAB Group company

            1 Reply Last reply
            0
            • V Offline
              V Offline
              valandil211
              wrote on last edited by
              #7

              And by using,

              @ CQp::CQp(QWidget *parent):
              testroot(parent);

              {
              }
              @

              what am I changing to the inheritance chain?

              Joey Dumont

              1 Reply Last reply
              0
              • D Offline
                D Offline
                dangelog
                wrote on last edited by
                #8

                You're not changing the inheritance graph (which is defined by the class definition); that's a call to a base constructor from your constructor. You're now calling a costructor of a direct-base (allowed) instead of a non-direct base (forbidden).

                Software Engineer
                KDAB (UK) Ltd., a KDAB Group company

                1 Reply Last reply
                0
                • L Offline
                  L Offline
                  loladiro
                  wrote on last edited by
                  #9

                  Nothing, but you are calling the constructor of your base class (which is the only constructor your are allowed to call in C++).

                  1 Reply Last reply
                  0
                  • V Offline
                    V Offline
                    valandil211
                    wrote on last edited by
                    #10

                    Thanks for both your simultaneous answers!

                    Now, will I be able to instantiate the tests that are at the far end of the inheritance graph by using QWidget signals like show() and such? My guess is no, but if so my abstract classes organization scheme falls apart.

                    Any thoughts?

                    Joey Dumont

                    1 Reply Last reply
                    0
                    • L Offline
                      L Offline
                      loladiro
                      wrote on last edited by
                      #11

                      Yes you will! Signals/Slots are inherited just like methods (because they are methods).

                      1 Reply Last reply
                      0
                      • V Offline
                        V Offline
                        valandil211
                        wrote on last edited by
                        #12

                        Oh, I just got it. Thanks for your patience!

                        Joey Dumont

                        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