Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Constructor syntax in Qt in mainwindow.cpp
Qt 6.11 is out! See what's new in the release blog

Constructor syntax in Qt in mainwindow.cpp

Scheduled Pinned Locked Moved Solved General and Desktop
16 Posts 5 Posters 3.8k 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.
  • Swati777999S Swati777999

    Hi All,

    I have a doubt about the syntax of the constructor implemented in the mainwindow.cpp file. Below is an example of a constructor defined in mainwindow.cpp file. I would like to be confirmed about this part of the syntax . I feel that it shows the inheritance as MainWindow is inherited from QMainWindow.

    Doubts:

    1. Why is the argument i.e parent same for both MainWindow and QMainWindow , for eg. MainWindow(QWidget *parent)
      : QMainWindow(parent) . For MainWindow , the argument parent is of type QWidget , does this parent has same type with QMainWindow?

    2. What are name(0), place(0),thing(0), about(0) in the definition ?
      : QMainWindow(parent),
      name(0),
      place(0),
      thing(0),
      about(0)

       MainWindow::MainWindow(QWidget *parent)
       : QMainWindow(parent),
       name(0),
       place(0),
       thing(0),
       about(0)
      
    jsulmJ Offline
    jsulmJ Offline
    jsulm
    Lifetime Qt Champion
    wrote on last edited by jsulm
    #2

    @Swati777999 Please read https://doc.qt.io/qt-5/objecttrees.html
    And also learn about C++ constructors.

    1. Parent is of type QWidget* because any widget can be parent of other widgets. "does this parent has same type with QMainWindow?" - why don't you check documentation (https://doc.qt.io/qt-5/qmainwindow.html#QMainWindow)?
    2. This has nothing to do with Qt. name, place, thing and about seem to be member variables in your MainWindow class which are initialised this way in constructor. This are C++ basics, has nothing to do with Qt.

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

    Swati777999S 1 Reply Last reply
    2
    • jsulmJ jsulm

      @Swati777999 Please read https://doc.qt.io/qt-5/objecttrees.html
      And also learn about C++ constructors.

      1. Parent is of type QWidget* because any widget can be parent of other widgets. "does this parent has same type with QMainWindow?" - why don't you check documentation (https://doc.qt.io/qt-5/qmainwindow.html#QMainWindow)?
      2. This has nothing to do with Qt. name, place, thing and about seem to be member variables in your MainWindow class which are initialised this way in constructor. This are C++ basics, has nothing to do with Qt.
      Swati777999S Offline
      Swati777999S Offline
      Swati777999
      wrote on last edited by
      #3

      @jsulm I don't understand how the member variables are represented in the declaration of the constructor with commas.

      :QMainWindow(parent),
      name(0),
      place(0),
      thing(0),
      about(0)
      

      Generally, in C++ , any function is declared as
      void custom_func (arg1,arg2......argn)
      {
      ............
      }

      Please clarify the above syntax of Qt constructor declaration.

      “ In order to be irreplaceable, one must always be different” – Coco Chanel

      jsulmJ JonBJ KroMignonK 3 Replies Last reply
      0
      • Swati777999S Swati777999

        @jsulm I don't understand how the member variables are represented in the declaration of the constructor with commas.

        :QMainWindow(parent),
        name(0),
        place(0),
        thing(0),
        about(0)
        

        Generally, in C++ , any function is declared as
        void custom_func (arg1,arg2......argn)
        {
        ............
        }

        Please clarify the above syntax of Qt constructor declaration.

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

        @Swati777999 said in Constructor syntax in Qt in mainwindow.cpp:

        I don't understand how the member variables are represented in the declaration of the constructor with commas.

        Please learn C++! You are asking absolute basics!

        class SomeClass
        {
        public:
            SomeClass():
                a(1),
                b("Some String")
            {}
        private:
            int a;
            std::string b;
        };
        

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

        Swati777999S 1 Reply Last reply
        3
        • Swati777999S Swati777999

          @jsulm I don't understand how the member variables are represented in the declaration of the constructor with commas.

          :QMainWindow(parent),
          name(0),
          place(0),
          thing(0),
          about(0)
          

          Generally, in C++ , any function is declared as
          void custom_func (arg1,arg2......argn)
          {
          ............
          }

          Please clarify the above syntax of Qt constructor declaration.

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

          @Swati777999 said in Constructor syntax in Qt in mainwindow.cpp:

          Generally, in C++ , any function is declared as
          void custom_func (arg1,arg2......argn)
          {

          This is a plain C function declaration. The example you are asking about is for a C++ class method, and inheriting from a base class.

          It does not declare the variables in the comma-list, it merely initializes them. They must be declared as class members, as @jsulm has shown. In this particular case it is just equivalent to:

           MainWindow::MainWindow(QWidget *parent)
           : QMainWindow(parent)
          {
               name = 0;
               place = 0;
               thing = 0;
               about = 0;
              ...
          }
          
          Swati777999S 1 Reply Last reply
          2
          • Swati777999S Swati777999

            @jsulm I don't understand how the member variables are represented in the declaration of the constructor with commas.

            :QMainWindow(parent),
            name(0),
            place(0),
            thing(0),
            about(0)
            

            Generally, in C++ , any function is declared as
            void custom_func (arg1,arg2......argn)
            {
            ............
            }

            Please clarify the above syntax of Qt constructor declaration.

            KroMignonK Offline
            KroMignonK Offline
            KroMignon
            wrote on last edited by
            #6

            @Swati777999 said in Constructor syntax in Qt in mainwindow.cpp:

            I don't understand how the member variables are represented in the declaration of the constructor with commas.

            As told by @jsulm : this is C++ basic knowledge: https://en.cppreference.com/w/cpp/language/constructor

            As Qt is a C++ framework, it will really help you, and save from frustrations, to to first learn C++ basics.

            It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

            1 Reply Last reply
            0
            • jsulmJ jsulm

              @Swati777999 said in Constructor syntax in Qt in mainwindow.cpp:

              I don't understand how the member variables are represented in the declaration of the constructor with commas.

              Please learn C++! You are asking absolute basics!

              class SomeClass
              {
              public:
                  SomeClass():
                      a(1),
                      b("Some String")
                  {}
              private:
                  int a;
                  std::string b;
              };
              
              Swati777999S Offline
              Swati777999S Offline
              Swati777999
              wrote on last edited by
              #7

              @jsulm I'm familiar with the private variables declaration in your code not with the function declared in the public section.

              I've taken up courses of C++ in one of my undergraduate curriculum but have never found the syntax of C++ function like this before. So, put this question.

              “ In order to be irreplaceable, one must always be different” – Coco Chanel

              KroMignonK jsulmJ 2 Replies Last reply
              0
              • Swati777999S Swati777999

                @jsulm I'm familiar with the private variables declaration in your code not with the function declared in the public section.

                I've taken up courses of C++ in one of my undergraduate curriculum but have never found the syntax of C++ function like this before. So, put this question.

                KroMignonK Offline
                KroMignonK Offline
                KroMignon
                wrote on last edited by
                #8

                @Swati777999 said in Constructor syntax in Qt in mainwindow.cpp:

                have never found the syntax of C++ function like this before

                Because this is not a function but a class constructor declaration.

                It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

                Swati777999S 1 Reply Last reply
                0
                • Swati777999S Swati777999

                  @jsulm I'm familiar with the private variables declaration in your code not with the function declared in the public section.

                  I've taken up courses of C++ in one of my undergraduate curriculum but have never found the syntax of C++ function like this before. So, put this question.

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

                  @Swati777999 said in Constructor syntax in Qt in mainwindow.cpp:

                  syntax of C++ function like this before

                  This syntax is only valid for C++ constructors, not normal functions/methods.
                  A C++ course should actually cover this basic thing.
                  Please follow the link provided by @KroMignon

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

                  1 Reply Last reply
                  0
                  • JonBJ JonB

                    @Swati777999 said in Constructor syntax in Qt in mainwindow.cpp:

                    Generally, in C++ , any function is declared as
                    void custom_func (arg1,arg2......argn)
                    {

                    This is a plain C function declaration. The example you are asking about is for a C++ class method, and inheriting from a base class.

                    It does not declare the variables in the comma-list, it merely initializes them. They must be declared as class members, as @jsulm has shown. In this particular case it is just equivalent to:

                     MainWindow::MainWindow(QWidget *parent)
                     : QMainWindow(parent)
                    {
                         name = 0;
                         place = 0;
                         thing = 0;
                         about = 0;
                        ...
                    }
                    
                    Swati777999S Offline
                    Swati777999S Offline
                    Swati777999
                    wrote on last edited by
                    #10

                    @JonB Your syntax is what I had expected and seen many times before. This is how the variables are initialized.

                    “ In order to be irreplaceable, one must always be different” – Coco Chanel

                    jsulmJ 1 Reply Last reply
                    0
                    • Swati777999S Swati777999

                      @JonB Your syntax is what I had expected and seen many times before. This is how the variables are initialized.

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

                      @Swati777999 said in Constructor syntax in Qt in mainwindow.cpp:

                      This is how the variables are initialized.

                      This is a possibility. But in proper C++ projects this is not the way members are initialised. Such code would not get approved in projects I work on unless there is really a need to do it this way.
                      Correct way to initialise members is using the syntax you were asking about. So, I suggest you learn and use it. This is also nothing new, exists in C++ for ages already.

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

                      1 Reply Last reply
                      2
                      • KroMignonK KroMignon

                        @Swati777999 said in Constructor syntax in Qt in mainwindow.cpp:

                        have never found the syntax of C++ function like this before

                        Because this is not a function but a class constructor declaration.

                        Swati777999S Offline
                        Swati777999S Offline
                        Swati777999
                        wrote on last edited by
                        #12

                        @KroMignon Precisely, a constructor is a member function of a class.

                        “ In order to be irreplaceable, one must always be different” – Coco Chanel

                        jsulmJ KroMignonK 2 Replies Last reply
                        0
                        • Swati777999S Swati777999

                          @KroMignon Precisely, a constructor is a member function of a class.

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

                          @Swati777999 said in Constructor syntax in Qt in mainwindow.cpp:

                          a constructor is a member function of a class

                          It is a special member function of a class

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

                          jsulmJ 1 Reply Last reply
                          0
                          • Swati777999S Swati777999

                            @KroMignon Precisely, a constructor is a member function of a class.

                            KroMignonK Offline
                            KroMignonK Offline
                            KroMignon
                            wrote on last edited by
                            #14

                            @Swati777999 said in Constructor syntax in Qt in mainwindow.cpp:

                            Precisely, a constructor is a member function of a class.

                            I don't understand what your goal is?
                            You ask a question about very basic C++ syntax, for which you've got answer and pointer to C++ documentation to get more detailed explanation, but you don't seems to accept those responses.
                            Why?
                            Do I hurt you in any way?

                            It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

                            1 Reply Last reply
                            0
                            • jsulmJ jsulm

                              @Swati777999 said in Constructor syntax in Qt in mainwindow.cpp:

                              a constructor is a member function of a class

                              It is a special member function of a class

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

                              @jsulm Here an explanation why this specual syntax is better:

                              class A
                              {
                              public:
                                  A() { std::cout << "A" << std::endl; }
                                  A(int) { std::cout << "A(int)" << std::endl; }
                              };
                              
                              class B
                              {
                              public:
                                  B() { a = A(1); }
                              
                              private:
                                  A a;
                              };
                              
                              B b;
                              

                              In the above code you will see that both A constructors are called, even though you are creating only one A instance explicetly. Reason is that members are initialised for you if you don't do it explicetly. In this case a is initialised using default constructor first, but then you create a new one using the other constructor and assign it to a.
                              If you change

                              B() { a = A(1); }
                              

                              to

                              B()
                                  : a(1)
                              {  }
                              

                              you will see that only one constructor is called. So, it is more efficient to use the special constructor syntax.

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

                              M 1 Reply Last reply
                              3
                              • jsulmJ jsulm

                                @jsulm Here an explanation why this specual syntax is better:

                                class A
                                {
                                public:
                                    A() { std::cout << "A" << std::endl; }
                                    A(int) { std::cout << "A(int)" << std::endl; }
                                };
                                
                                class B
                                {
                                public:
                                    B() { a = A(1); }
                                
                                private:
                                    A a;
                                };
                                
                                B b;
                                

                                In the above code you will see that both A constructors are called, even though you are creating only one A instance explicetly. Reason is that members are initialised for you if you don't do it explicetly. In this case a is initialised using default constructor first, but then you create a new one using the other constructor and assign it to a.
                                If you change

                                B() { a = A(1); }
                                

                                to

                                B()
                                    : a(1)
                                {  }
                                

                                you will see that only one constructor is called. So, it is more efficient to use the special constructor syntax.

                                M Offline
                                M Offline
                                mpergand
                                wrote on last edited by mpergand
                                #16

                                To go along with @jsulm
                                With const and reference variables, using the initializer list is mandatory.

                                class B
                                {
                                public:
                                    B() 
                                        { 
                                        a = A(1);
                                        str="hello";  // error
                                        }
                                
                                private:
                                    A a;
                                    const string str;
                                };
                                

                                Funny enough, that way you can initialize a const var two times !

                                class B
                                {
                                public:
                                    B() : str("hello2") 
                                        { 
                                        a = A(1);
                                
                                        }
                                
                                private:
                                    A a;
                                    const string str="hello";  // since  c++11
                                };
                                
                                1 Reply Last reply
                                2

                                • Login

                                • Login or register to search.
                                • First post
                                  Last post
                                0
                                • Categories
                                • Recent
                                • Tags
                                • Popular
                                • Users
                                • Groups
                                • Search
                                • Get Qt
                                • Unsolved