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
QtWS25 Last Chance

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 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

                          12/14

                          27 Nov 2017, 14:57

                          • Login

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