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. fail to use Q_OBJECT Macro in CMake Project

fail to use Q_OBJECT Macro in CMake Project

Scheduled Pinned Locked Moved Unsolved General and Desktop
moccmakeqobject
14 Posts 4 Posters 9.7k Views
  • 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.
  • S Offline
    S Offline
    Sewing
    wrote on 24 Nov 2017, 13:07 last edited by
    #2

    Anyone? I am losing my mind over here -.-

    ? 1 Reply Last reply 24 Nov 2017, 13:20
    0
    • S Sewing
      24 Nov 2017, 13:07

      Anyone? I am losing my mind over here -.-

      ? Offline
      ? Offline
      A Former User
      wrote on 24 Nov 2017, 13:20 last edited by
      #3

      @Sewing said in fail to use Q_OBJECT Macro in CMake Project:

      Anyone?

      It's only 2 hours since your initial post. Please show a little more patience, like 24 hours. It's always nighttime for half of the community. And it's friday.

      1 Reply Last reply
      5
      • S Offline
        S Offline
        SGaist
        Lifetime Qt Champion
        wrote on 24 Nov 2017, 21:54 last edited by
        #4

        Hi,

        Did you already took a look at the CMake Manual from Qt's documentation ?

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        V 1 Reply Last reply 27 Nov 2017, 14:57
        0
        • S Offline
          S Offline
          Sewing
          wrote on 27 Nov 2017, 11:07 last edited by
          #5

          I did, but without being able to infer any conclusive hints from the article towards a solution for my problem

          1 Reply Last reply
          0
          • V Offline
            V Offline
            VRonin
            wrote on 27 Nov 2017, 12:35 last edited by VRonin
            #6

            The problem is not CMake:

            @Sewing said in fail to use Q_OBJECT Macro in CMake Project:

            mainWindow.cpp: The file contains a Q_OBJECT macro

            from http://doc.qt.io/qt-5/moc.html

            The moc tool reads a C++ header file.

            Did you declare a class with Q_OBJECT in a .cpp file? if so either yo do as the compiler tells you and #include "mainWindow.moc" (this file name might change depending on how moc gets invoked) at the end of the file or, as I would recommend, move it into a header

            "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
            ~Napoleon Bonaparte

            On a crusade to banish setIndexWidget() from the holy land of Qt

            1 Reply Last reply
            4
            • S Offline
              S Offline
              Sewing
              wrote on 27 Nov 2017, 13:12 last edited by
              #7

              Mh difficult since I employ the pimpl idiom in which the nested implementation class in defined entirely within the source file

              V 1 Reply Last reply 27 Nov 2017, 13:29
              0
              • S Offline
                S Offline
                SGaist
                Lifetime Qt Champion
                wrote on 27 Nov 2017, 13:17 last edited by
                #8

                Then move the private declaration part in its own header that you only include in the implementation part.

                Note that your MainWindow implementation looks a bit convoluted, you might be over-engineering some things.

                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
                2
                • S Offline
                  S Offline
                  Sewing
                  wrote on 27 Nov 2017, 13:28 last edited by
                  #9

                  thank you for the help.

                  you mean cuz of using pimpl? this is just a minimal example and my intention was, to keep the public interface of mainwindow.cpp quite clean and readable

                  1 Reply Last reply
                  0
                  • S Sewing
                    27 Nov 2017, 13:12

                    Mh difficult since I employ the pimpl idiom in which the nested implementation class in defined entirely within the source file

                    V Offline
                    V Offline
                    VRonin
                    wrote on 27 Nov 2017, 13:29 last edited by
                    #10

                    @Sewing said in fail to use Q_OBJECT Macro in CMake Project:

                    pimpl idiom in which the nested implementation class in defined entirely within the source file

                    You can move it into a header file, Qt does it all the time, they use _p.h suffix to mark private headers. For example: QDateTimePrivate

                    "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                    ~Napoleon Bonaparte

                    On a crusade to banish setIndexWidget() from the holy land of Qt

                    1 Reply Last reply
                    2
                    • S Offline
                      S Offline
                      Sewing
                      wrote on 27 Nov 2017, 14:42 last edited by
                      #11

                      so if I understood correctly, the reason of having to do this is that the Q_OBJECT Macro has to be defined in the header file instead of the source file?

                      and after doing so, is the line

                      set_target_properties(${PROJECT_NAME} PROPERTIES AUTOMOC TRUE)
                      

                      sufficient for invoking the MOC in my CMakeLists file?

                      1 Reply Last reply
                      0
                      • S SGaist
                        24 Nov 2017, 21:54

                        Hi,

                        Did you already took a look at the CMake Manual from Qt's documentation ?

                        V Offline
                        V Offline
                        VRonin
                        wrote on 27 Nov 2017, 14:57 last edited by
                        #12

                        @SGaist said in fail to use Q_OBJECT Macro in CMake Project:

                        Did you already took a look at the CMake Manual from Qt's documentation ?

                        @Sewing said in fail to use Q_OBJECT Macro in CMake Project:

                        I did

                        from http://doc.qt.io/qt-5/cmake-manual.html:

                        # Instruct CMake to run moc automatically when needed.
                        set(CMAKE_AUTOMOC ON)
                        

                        "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                        ~Napoleon Bonaparte

                        On a crusade to banish setIndexWidget() from the holy land of Qt

                        1 Reply Last reply
                        0
                        • S Offline
                          S Offline
                          Sewing
                          wrote on 27 Nov 2017, 15:00 last edited by
                          #13

                          I read that, just thought variables in CMake are old-style while target_properties are the modern way to handle things

                          V 1 Reply Last reply 27 Nov 2017, 15:06
                          0
                          • S Sewing
                            27 Nov 2017, 15:00

                            I read that, just thought variables in CMake are old-style while target_properties are the modern way to handle things

                            V Offline
                            V Offline
                            VRonin
                            wrote on 27 Nov 2017, 15:06 last edited by
                            #14

                            I heard opposing arguments to that when it comes to moc/rcc/uic. Personally, I use the set(CMAKE_AUTOMOC ON) way

                            "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                            ~Napoleon Bonaparte

                            On a crusade to banish setIndexWidget() from the holy land of Qt

                            1 Reply Last reply
                            0

                            11/14

                            27 Nov 2017, 14:42

                            • Login

                            • Login or register to search.
                            11 out of 14
                            • First post
                              11/14
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • Users
                            • Groups
                            • Search
                            • Get Qt Extensions
                            • Unsolved