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. Access and inheritance
Forum Updated to NodeBB v4.3 + New Features

Access and inheritance

Scheduled Pinned Locked Moved Solved General and Desktop
49 Posts 5 Posters 11.8k Views 4 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.
  • mrjjM mrjj

    @tomy
    hi
    well its MainWindow as a subclass of QMainWindow
    The names are so close its sometimes confusing.
    The truth is, if a base class do not do anything in its constructor, nothing bad will happen not calling it.
    Which seems why they didnt bother here for MainWindow

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

    @mrjj said in Access and inheritance:

    The truth is, if a base class do not do anything in its constructor, nothing bad will happen not calling it.

    Just for completeness:
    If the base class has a default constructor, and it's not called explicitly in the derived class' constructor the compiler is going to generate code to call it implicitly. Omitting it in the initializer list means nothing here, as QMainWindow() is going to be called either way. If the base class does not have a default constructor, and there's no call to the parent's constructor then this is going to generate a compile error, as the compiler has no idea what to do.

    Read and abide by the Qt Code of Conduct

    tomyT 1 Reply Last reply
    4
    • kshegunovK kshegunov

      @mrjj said in Access and inheritance:

      The truth is, if a base class do not do anything in its constructor, nothing bad will happen not calling it.

      Just for completeness:
      If the base class has a default constructor, and it's not called explicitly in the derived class' constructor the compiler is going to generate code to call it implicitly. Omitting it in the initializer list means nothing here, as QMainWindow() is going to be called either way. If the base class does not have a default constructor, and there's no call to the parent's constructor then this is going to generate a compile error, as the compiler has no idea what to do.

      tomyT Offline
      tomyT Offline
      tomy
      wrote on last edited by
      #26

      @kshegunov
      Hi,

      If the base class has a default constructor, and it's not called explicitly in the derived class' constructor the compiler is going to generate code to call it implicitly. Omitting it in the initializer list means nothing here, as QMainWindow() is going to be called either way.

      Is it true for the Qt Creator compiler too? (I think so)

      If the base class does not have a default constructor, and there's no call to the parent's constructor then this is going to generate a compile error, as the compiler has no idea what to do.

      Can we conclude this way that, when the base class doesn't have a constructor, in either way, whether the subclass calls the parent's constructor (!) or it doesn't, we will get an error?

      kshegunovK 1 Reply Last reply
      0
      • tomyT tomy

        @kshegunov
        Hi,

        If the base class has a default constructor, and it's not called explicitly in the derived class' constructor the compiler is going to generate code to call it implicitly. Omitting it in the initializer list means nothing here, as QMainWindow() is going to be called either way.

        Is it true for the Qt Creator compiler too? (I think so)

        If the base class does not have a default constructor, and there's no call to the parent's constructor then this is going to generate a compile error, as the compiler has no idea what to do.

        Can we conclude this way that, when the base class doesn't have a constructor, in either way, whether the subclass calls the parent's constructor (!) or it doesn't, we will get an error?

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

        @tomy said in Access and inheritance:

        Is it true for the Qt Creator compiler too? (I think so)

        Qt Creator is not a compiler, it uses some compiler (whatever you've configured), but yes, it's true for all compiler, as this is standard (and required) behaviour for C++.

        Can we conclude this way that, when the base class doesn't have a constructor, in either way, whether the subclass calls the parent's constructor (!) or it doesn't, we will get an error?

        No. Not defining a class constructor means the compiler generates a default one for you (unless specifically told otherwise). If you haven't defined a constructor in the base class, then the derived class is going to implicitly call the automatically generated one.

        Read and abide by the Qt Code of Conduct

        tomyT 1 Reply Last reply
        3
        • kshegunovK kshegunov

          @tomy said in Access and inheritance:

          Is it true for the Qt Creator compiler too? (I think so)

          Qt Creator is not a compiler, it uses some compiler (whatever you've configured), but yes, it's true for all compiler, as this is standard (and required) behaviour for C++.

          Can we conclude this way that, when the base class doesn't have a constructor, in either way, whether the subclass calls the parent's constructor (!) or it doesn't, we will get an error?

          No. Not defining a class constructor means the compiler generates a default one for you (unless specifically told otherwise). If you haven't defined a constructor in the base class, then the derived class is going to implicitly call the automatically generated one.

          tomyT Offline
          tomyT Offline
          tomy
          wrote on last edited by
          #28

          @kshegunov

          So we will never have to call the base class's constructor from the subclass, because if there is an explicit constructor for the base class, the compiler calls (implicitly) for us (with the absence of an explicit call from us), and if there is no constructor for the base class, the compiler creates a default one and implicitly calls that in the subclass. Hence, we had better never involve ourselves with calling a base class's constructor directly (from the subclass)! :) :)

          mrjjM kshegunovK 2 Replies Last reply
          0
          • tomyT tomy

            @kshegunov

            So we will never have to call the base class's constructor from the subclass, because if there is an explicit constructor for the base class, the compiler calls (implicitly) for us (with the absence of an explicit call from us), and if there is no constructor for the base class, the compiler creates a default one and implicitly calls that in the subclass. Hence, we had better never involve ourselves with calling a base class's constructor directly (from the subclass)! :) :)

            mrjjM Offline
            mrjjM Offline
            mrjj
            Lifetime Qt Champion
            wrote on last edited by mrjj
            #29

            @tomy
            Hi
            The automatic version is only for a default constructor.
            As soon as base class constructor takes parameters, it must be called from subclass as compiler cannot
            know how to obtain the parameters to give to base class.
            However the compiler will tell you that.

            1 Reply Last reply
            3
            • tomyT tomy

              @kshegunov

              So we will never have to call the base class's constructor from the subclass, because if there is an explicit constructor for the base class, the compiler calls (implicitly) for us (with the absence of an explicit call from us), and if there is no constructor for the base class, the compiler creates a default one and implicitly calls that in the subclass. Hence, we had better never involve ourselves with calling a base class's constructor directly (from the subclass)! :) :)

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

              What @mrjj said, plus the moment you define a constructor, the compiler stops generating for you. Thus if you define a constructor with parameters, the compiler will not generate a default constructor for you. Beautiful system, right? :)

              Read and abide by the Qt Code of Conduct

              tomyT 1 Reply Last reply
              3
              • mrjjM mrjj

                @tomy
                Hi
                Nope its just how the QWidgets look.
                If you change the icons to flat style,
                it will look more "modern"

                You could use something like
                https://github.com/laserpants/qt-material-widgets
                if you want to go all in for "modern" look.

                tomyT Offline
                tomyT Offline
                tomy
                wrote on last edited by
                #31

                @mrjj

                If you change the icons to flat style, it will look more "modern"

                Hi,
                The example you posted look very modern and stylish, but too advanced for me now. Thank you.
                I like to go step by step. So for the icons, I must download some "flat .png related files" from the Internet and substitute the old ones with these. Right?

                mrjjM 1 Reply Last reply
                0
                • tomyT tomy

                  @mrjj

                  If you change the icons to flat style, it will look more "modern"

                  Hi,
                  The example you posted look very modern and stylish, but too advanced for me now. Thank you.
                  I like to go step by step. So for the icons, I must download some "flat .png related files" from the Internet and substitute the old ones with these. Right?

                  mrjjM Offline
                  mrjjM Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on last edited by
                  #32

                  @tomy
                  Hi
                  Yes, that could be the first step.
                  Maybe a bit of stylesheet to make QToolbar more flat to fit the new icons.
                  I dont have an image of spreadsheet app around so im not sure what else you can
                  do currently. will write of get any other ideas.

                  1 Reply Last reply
                  1
                  • kshegunovK kshegunov

                    What @mrjj said, plus the moment you define a constructor, the compiler stops generating for you. Thus if you define a constructor with parameters, the compiler will not generate a default constructor for you. Beautiful system, right? :)

                    tomyT Offline
                    tomyT Offline
                    tomy
                    wrote on last edited by
                    #33

                    @kshegunov

                    Beautiful system, right? :)

                    Right. :)

                    @mrjj

                    Yes, that could be the first step.
                    Maybe a bit of stylesheet to make QToolbar more flat to fit the new icons.
                    I dont have an image of spreadsheet app around so im not sure what else you can
                    do currently. will write of get any other ideas.

                    Hi, Thanks. So I need to lookup "stylesheet".

                    mrjjM 1 Reply Last reply
                    0
                    • tomyT tomy

                      @kshegunov

                      Beautiful system, right? :)

                      Right. :)

                      @mrjj

                      Yes, that could be the first step.
                      Maybe a bit of stylesheet to make QToolbar more flat to fit the new icons.
                      I dont have an image of spreadsheet app around so im not sure what else you can
                      do currently. will write of get any other ideas.

                      Hi, Thanks. So I need to lookup "stylesheet".

                      mrjjM Offline
                      mrjjM Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on last edited by
                      #34

                      @tomy

                      Hi
                      https://doc.qt.io/qt-5/stylesheet.html

                      tomyT 2 Replies Last reply
                      1
                      • mrjjM mrjj

                        @tomy

                        Hi
                        https://doc.qt.io/qt-5/stylesheet.html

                        tomyT Offline
                        tomyT Offline
                        tomy
                        wrote on last edited by
                        #35

                        @mrjj
                        Thanks to you. :)

                        1 Reply Last reply
                        0
                        • mrjjM mrjj

                          @tomy

                          Hi
                          https://doc.qt.io/qt-5/stylesheet.html

                          tomyT Offline
                          tomyT Offline
                          tomy
                          wrote on last edited by
                          #36

                          @mrjj Hi,

                          I created a new project called MySpreadsheet and added a few more options to the context menu and renewed the icons to flat ones.
                          Now when I run the project, it runs normally, but when we close it, the follwoing message is written in the Application Output window:

                          Starting D:\Projects\Qt\MySpreadsheet\MySpreadsheet\build-MySpreadsheet-Desktop_Qt_5_12_0_MinGW_64_bit-Debug\debug\MySpreadsheet.exe...
                          FTH: (243752): *** Fault tolerant heap shim applied to current process. This is usually due to previous crashes. ***
                          The program has unexpectedly finished.
                          The process was ended forcefully.
                          D:/Projects/Qt/MySpreadsheet/MySpreadsheet/build-MySpreadsheet-Desktop_Qt_5_12_0_MinGW_64_bit-Debug/debug/MySpreadsheet.exe crashed.

                          What is the problem please?
                          Is it not related to the .pro file, please?

                          jsulmJ 1 Reply Last reply
                          0
                          • tomyT tomy

                            @mrjj Hi,

                            I created a new project called MySpreadsheet and added a few more options to the context menu and renewed the icons to flat ones.
                            Now when I run the project, it runs normally, but when we close it, the follwoing message is written in the Application Output window:

                            Starting D:\Projects\Qt\MySpreadsheet\MySpreadsheet\build-MySpreadsheet-Desktop_Qt_5_12_0_MinGW_64_bit-Debug\debug\MySpreadsheet.exe...
                            FTH: (243752): *** Fault tolerant heap shim applied to current process. This is usually due to previous crashes. ***
                            The program has unexpectedly finished.
                            The process was ended forcefully.
                            D:/Projects/Qt/MySpreadsheet/MySpreadsheet/build-MySpreadsheet-Desktop_Qt_5_12_0_MinGW_64_bit-Debug/debug/MySpreadsheet.exe crashed.

                            What is the problem please?
                            Is it not related to the .pro file, please?

                            jsulmJ Online
                            jsulmJ Online
                            jsulm
                            Lifetime Qt Champion
                            wrote on last edited by
                            #37

                            @tomy Please run through debugger and post stack trace after it crashed...

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

                            tomyT 1 Reply Last reply
                            0
                            • jsulmJ jsulm

                              @tomy Please run through debugger and post stack trace after it crashed...

                              tomyT Offline
                              tomyT Offline
                              tomy
                              wrote on last edited by
                              #38

                              @jsulm
                              Do you mean by pressing F5, please?
                              If so, I did it, but how to post stack trace?

                              0_1550499661735_Capture_1.PNG

                              1 Reply Last reply
                              0
                              • mrjjM Offline
                                mrjjM Offline
                                mrjj
                                Lifetime Qt Champion
                                wrote on last edited by
                                #39

                                Hi
                                It is the list to the right we are after

                                The code
                                for entries Level 2,3 would help a lot.

                                tomyT 1 Reply Last reply
                                2
                                • mrjjM mrjj

                                  Hi
                                  It is the list to the right we are after

                                  The code
                                  for entries Level 2,3 would help a lot.

                                  tomyT Offline
                                  tomyT Offline
                                  tomy
                                  wrote on last edited by
                                  #40

                                  @mrjj,
                                  Hi,

                                  0_1550500483783_1.PNG

                                  Do you mean I copy and paste code for level 7 and 11 here?
                                  7 is the project's code but 11 includes thousands of lines of code.

                                  mrjjM 1 Reply Last reply
                                  0
                                  • tomyT tomy

                                    @mrjj,
                                    Hi,

                                    0_1550500483783_1.PNG

                                    Do you mean I copy and paste code for level 7 and 11 here?
                                    7 is the project's code but 11 includes thousands of lines of code.

                                    mrjjM Offline
                                    mrjjM Offline
                                    mrjj
                                    Lifetime Qt Champion
                                    wrote on last edited by
                                    #41

                                    @tomy
                                    Hi
                                    The line it shows when you click on 11 ? line 1339

                                    tomyT 1 Reply Last reply
                                    1
                                    • mrjjM mrjj

                                      @tomy
                                      Hi
                                      The line it shows when you click on 11 ? line 1339

                                      tomyT Offline
                                      tomyT Offline
                                      tomy
                                      wrote on last edited by
                                      #42

                                      @mrjj, Hi,

                                      Here you are:

                                      0_1550504186993_2.PNG

                                      1 Reply Last reply
                                      0
                                      • mrjjM Offline
                                        mrjjM Offline
                                        mrjj
                                        Lifetime Qt Champion
                                        wrote on last edited by
                                        #43

                                        Hi
                                        it was not what i as i had hoped, it being inside some of the user code.
                                        I wonder if you have a double free.
                                        Did you change anything in main.cpp?

                                        tomyT 1 Reply Last reply
                                        0
                                        • mrjjM mrjj

                                          Hi
                                          it was not what i as i had hoped, it being inside some of the user code.
                                          I wonder if you have a double free.
                                          Did you change anything in main.cpp?

                                          tomyT Offline
                                          tomyT Offline
                                          tomy
                                          wrote on last edited by tomy
                                          #44

                                          @mrjj Hi,

                                          Here is main.cpp:

                                          #include "myspreadsheet.h"
                                          #include <QApplication>
                                          #include <QSplashScreen>
                                          
                                          int main(int argc, char *argv[])
                                          {
                                              QApplication app(argc, argv);
                                          
                                              QSplashScreen* splash = new QSplashScreen;
                                              splash->setPixmap(QPixmap(":/images/splash.jpg"));
                                              splash->show();
                                          
                                              Qt::Alignment topRight = Qt::AlignRight | Qt::AlignTop;
                                              splash->showMessage(QObject::tr("Setting up the main window..."), topRight, Qt::white);
                                          
                                          
                                              MySpreadsheet* mySP = new MySpreadsheet;
                                              if(argc > 1)
                                                  mySP -> loadFile(argv[1]);
                                          
                                              mySP -> show();
                                              splash -> finish(mySP);
                                              delete splash;
                                          
                                              return app.exec();
                                          }
                                          

                                          I added those splash stuff and now apparently it's fine!

                                          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