Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. declare property of pointer in qml
Qt 6.11 is out! See what's new in the release blog

declare property of pointer in qml

Scheduled Pinned Locked Moved QML and Qt Quick
property
15 Posts 3 Posters 8.5k Views 2 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.
  • T themts

    datamodel is a c-class.

    p3c0P Offline
    p3c0P Offline
    p3c0
    Moderators
    wrote on last edited by
    #4

    @themts So you can set datamodel as a contextProperty. More info here.

    157

    1 Reply Last reply
    0
    • T Offline
      T Offline
      themts
      wrote on last edited by themts
      #5

      ok, I think it's not clear what I want.

      • I have a list with many objects in it (qList<ClassNameOfModel*>).
      • I display the list with a combobox (list is assigned as model to combobox)
      • I select one item in that combobox

      until here, no problem.

      Now I want to pass the selected item (ClassNameOfModel) to my common edit-component (qml-file) to display and edit some item-properties.
      This common edit-component looks like this:

      editComponent.qml:
      Item {
          property ClassNameOfModel *dataModel << This doesn't work
          TextField {
              text: dataModel.text1
              ...
          }
          TextField {
              text: dataModel.text2
              ...
          }
          TextField {
              text: dataModel.text3
              ...
          }
         ...
      }
      

      How can I pass data to my custom-component?

      p3c0P 1 Reply Last reply
      0
      • T themts

        ok, I think it's not clear what I want.

        • I have a list with many objects in it (qList<ClassNameOfModel*>).
        • I display the list with a combobox (list is assigned as model to combobox)
        • I select one item in that combobox

        until here, no problem.

        Now I want to pass the selected item (ClassNameOfModel) to my common edit-component (qml-file) to display and edit some item-properties.
        This common edit-component looks like this:

        editComponent.qml:
        Item {
            property ClassNameOfModel *dataModel << This doesn't work
            TextField {
                text: dataModel.text1
                ...
            }
            TextField {
                text: dataModel.text2
                ...
            }
            TextField {
                text: dataModel.text3
                ...
            }
           ...
        }
        

        How can I pass data to my custom-component?

        p3c0P Offline
        p3c0P Offline
        p3c0
        Moderators
        wrote on last edited by
        #6

        @themts Ok how do you call or load editComponent.qml ?

        157

        1 Reply Last reply
        0
        • T Offline
          T Offline
          themts
          wrote on last edited by
          #7

          ???

          editComponent {
          id: edit1
          }
          

          My idea was to use onCurrentIndexChanged to assign the selected model to my editComponent:

              configComboBox.onCurrentIndexChanged: {
                  edit.dataModel: configComboBox.model[configComboBox.currentIndex]
              }
          
          p3c0P 1 Reply Last reply
          0
          • T themts

            ???

            editComponent {
            id: edit1
            }
            

            My idea was to use onCurrentIndexChanged to assign the selected model to my editComponent:

                configComboBox.onCurrentIndexChanged: {
                    edit.dataModel: configComboBox.model[configComboBox.currentIndex]
                }
            
            p3c0P Offline
            p3c0P Offline
            p3c0
            Moderators
            wrote on last edited by
            #8

            @themts AFAIK you can do this

            property ClassNameOfModel dataModel
            

            Have done something similar but with Rectangle.
            What error do you get if you do it ?

            157

            1 Reply Last reply
            0
            • T Offline
              T Offline
              themts
              wrote on last edited by
              #9

              This declaration would create an instance of ClassNameOfModel.

              p3c0P 1 Reply Last reply
              0
              • T themts

                This declaration would create an instance of ClassNameOfModel.

                p3c0P Offline
                p3c0P Offline
                p3c0
                Moderators
                wrote on last edited by
                #10

                @themts I guess no. You can check it by printing dataModel. It should be null.

                157

                1 Reply Last reply
                0
                • T Offline
                  T Offline
                  themts
                  wrote on last edited by
                  #11

                  @themts:
                  It doesn't work.
                  I register my dataModelClass like this:
                  qmlRegisterUncreatableType<ClassNameOfModel>("com.test.application", 1, 0, "ClassNameOfModel", "no no no");
                  As soon as I start my application I see the output:

                  ...
                  qrc:/ConfigEdit.qml:3 Type ConfigEditEditForm unavailable
                  qrc:/ConfigEditEditForm.ui.qml:6 no no no
                  
                  p3c0P B 2 Replies Last reply
                  0
                  • T themts

                    @themts:
                    It doesn't work.
                    I register my dataModelClass like this:
                    qmlRegisterUncreatableType<ClassNameOfModel>("com.test.application", 1, 0, "ClassNameOfModel", "no no no");
                    As soon as I start my application I see the output:

                    ...
                    qrc:/ConfigEdit.qml:3 Type ConfigEditEditForm unavailable
                    qrc:/ConfigEditEditForm.ui.qml:6 no no no
                    
                    p3c0P Offline
                    p3c0P Offline
                    p3c0
                    Moderators
                    wrote on last edited by
                    #12

                    @themts Can you post the complete compilable example ? Getting confused now O.o

                    157

                    1 Reply Last reply
                    0
                    • T themts

                      @themts:
                      It doesn't work.
                      I register my dataModelClass like this:
                      qmlRegisterUncreatableType<ClassNameOfModel>("com.test.application", 1, 0, "ClassNameOfModel", "no no no");
                      As soon as I start my application I see the output:

                      ...
                      qrc:/ConfigEdit.qml:3 Type ConfigEditEditForm unavailable
                      qrc:/ConfigEditEditForm.ui.qml:6 no no no
                      
                      B Offline
                      B Offline
                      Buttink
                      wrote on last edited by
                      #13

                      @themts This is a known problem with registering an uncreateable type. Its because QML is declarative. See this ticket https://bugreports.qt.io/browse/QTBUG-36752?jql=text ~ "Uncreatable C%2B%2B type can't be used for QML property types" . You have to just do QmlRegisterType<>. If you read the docs for qmlRegisterUncreatableType it says "This is useful where the type is only intended for providing attached properties or enum values.".

                      1 Reply Last reply
                      0
                      • T Offline
                        T Offline
                        themts
                        wrote on last edited by themts
                        #14

                        @Buttink:
                        I already tried qmlRegisterType<ClassNameOfModel>() but then I get the message:
                        ClassNameOfModel is not a type

                        A workaround for me was now to declare a generic property var.
                        This way I have no code-completition but it works. Of course I would prefer a typesafe way.

                        I think it only works if I register the class as a creatable object, but then I have to implement a copyconstructor etc.

                        B 1 Reply Last reply
                        0
                        • T themts

                          @Buttink:
                          I already tried qmlRegisterType<ClassNameOfModel>() but then I get the message:
                          ClassNameOfModel is not a type

                          A workaround for me was now to declare a generic property var.
                          This way I have no code-completition but it works. Of course I would prefer a typesafe way.

                          I think it only works if I register the class as a creatable object, but then I have to implement a copyconstructor etc.

                          B Offline
                          B Offline
                          Buttink
                          wrote on last edited by
                          #15

                          @themts Hmmm that sounds really odd, but without the code, I don't know why it would output that error. I will say that you do not need a copy constructor. You could make a new qml type from

                          class Thing : public QObject
                          {
                              Q_OBJECT
                          public:
                              explicit Thing(QObject* parent = nullptr);
                              virtual ~Thing();
                          };
                          
                          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
                          • Unsolved