Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
qtws26_logo

The Qt Event of the Year: Qt World Summit 2026

Save Your Spot >
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. Cannot include QDeclarative Item
Qt 6.12 LTS is out! See what's new in the release blog

Cannot include QDeclarative Item

Scheduled Pinned Locked Moved QML and Qt Quick
26 Posts 3 Posters 24.5k 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.
  • JKSHJ Offline
    JKSHJ Offline
    JKSH
    Moderators
    wrote on last edited by
    #9

    [quote author="Javeria" date="1424331653"]error: C2227: left of '- >setContextProperty' must point to class/struct/union/generic type[/quote]That means your compiler doesn't recognize the item on the left of '->setContextProperty'. Did you #include <QQmlContext>?

    Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

    1 Reply Last reply
    0
    • ? Offline
      ? Offline
      A Former User
      wrote on last edited by
      #10

      Okay done!!, but i have to now call DetectSquares objects function iside QML file, but its givng me syntax error and i dont know how should i set the signal its really confusing :
      Here s is the DetectSqaure.h
      @#ifndef DETECTSQUARES_H
      #define DETECTSQUARES_H
      #include "opencv2/highgui/highgui.hpp"
      #include "opencv2/imgproc/imgproc.hpp"

      #include <iostream>

      using namespace cv;
      using namespace std;

      #include <QObject>

      class DetectSquares: public QObject
      {
      Q_OBJECT
      public:
      double angle(Point pt1, Point pt2, Point pt0);
      void findSquares(Mat image);
      static void drawSquares(Mat& image, const vector<vector<Point> >& squares);
      void Detect(Mat image);
      bool proximity(Size rect1, Size rect2);
      Rect proximity_rect(Rect rect1, Rect rect2);
      Rect is_a_box(Point cp);
      vector<vector<Point>> squares;
      Mat image;
      Point prev_pointer;
      vector<Rect> Detected;
      int y;

      };

      #endif // DETECTSQUARES_H
      @
      Hers the Qml Code:
      @import QtQuick 2.4
      import QtQuick.Controls 1.3
      import QtQuick.Window 2.2
      import QtQuick.Dialogs 1.2
      import QtQuick 2.0
      ApplicationWindow {
      title: qsTr("Sketch_it")
      width: 1500
      height: 1000
      visible: true
      property var imagesListModel: ["file:/original.jpg","file:/11.jpg","file:/test (1).jpg","file:/test (2).jpg","file:/test (3).jpg","file:/test (4).jpg","file:/test (5).jpg"]
      ListView {
      id: imagesList
      anchors.fill:parent
      spacing:25
      orientation: Qt.Vertical
      model: imagesListModel
      delegate: Image {
      objectName: "Displayimage"
      width: 75
      height: 100
      source: imagesListModel[index]
      Text{
      text:"Sketch"+(index+1)
      }

               MouseArea {
                   anchors.fill: parent
      
                   onClicked: {
                      main.source=imagesListModel[index]
                      Component.OnCompleted:{
                       m.Detect();
                       }
                     // console.log("User select '"+"' image");
                   }
               }
          }
      }
      Image{
          id:main
          width: 700
          height: 600
      
         // source:"file:/test (6).jpg"
          anchors.centerIn: parent
          MouseArea{
            anchors.fill:parent
             onClicked: {
      
      
                 console.log(mouseX+" "+mouseY);
           }
          }
      }
      

      }
      @

      1 Reply Last reply
      0
      • p3c0P Offline
        p3c0P Offline
        p3c0
        Moderators
        wrote on last edited by
        #11

        You will need to make those methods "Q_INVOKABLE":http://doc.qt.io/qt-5/qobject.html#Q_INVOKABLE. An example of how to access them is "here":http://doc.qt.io/qt-5/qtqml-cppintegration-exposecppattributes.html#exposing-methods-including-qt-slots.
        But beware that QML recognizes only the "following":http://doc.qt.io/qt-5/qtqml-cppintegration-data.html#basic-qt-data-types data types. So it wont recongnize those OpenCV's user defined data types.

        157

        1 Reply Last reply
        0
        • ? Offline
          ? Offline
          A Former User
          wrote on last edited by
          #12

          I ve kinda follwoed it, i dnt have enough time , i have 5 min, heres the code, its giving me syntax error when i use Component.onCompleted:
          @import QtQuick 2.4
          import QtQuick.Controls 1.3
          import QtQuick.Window 2.2
          import QtQuick.Dialogs 1.2
          import QtQuick 2.0
          ApplicationWindow {
          title: qsTr("Sketch_it")
          width: 1500
          height: 1000
          visible: true
          property var imagesListModel: ["file:/original.jpg","file:/11.jpg","file:/test (1).jpg","file:/test (2).jpg","file:/test (3).jpg","file:/test (4).jpg","file:/test (5).jpg"]
          ListView {
          id: imagesList
          anchors.fill:parent
          spacing:25
          orientation: Qt.Vertical
          model: imagesListModel
          delegate: Image {
          objectName: "Displayimage"
          width: 75
          height: 100
          source: imagesListModel[index]
          Text{
          text:"Sketch"+(index+1)
          }

                   MouseArea {
                       anchors.fill: parent
          
                       onClicked: {
                          main.source=imagesListModel[index]
                          Component.OnCompleted:
                           {
                               m.Detect();
                           }
                         // console.log("User select '"+"' image");
                       }
                   }
              }
          }
          Image{
              id:main
              width: 700
              height: 600
          
             // source:"file:/test (6).jpg"
              anchors.centerIn: parent
              MouseArea{
                anchors.fill:parent
                 onClicked: {
          
          
                     console.log(mouseX+" "+mouseY);
               }
              }
          }
          

          }
          @

          1 Reply Last reply
          0
          • p3c0P Offline
            p3c0P Offline
            p3c0
            Moderators
            wrote on last edited by
            #13

            Ofcourse it will.
            @
            void Detect(Mat image);
            @

            Takes an argument and you are not supplying it. Plus it takes an argument not recognized by QML. You will need to find another way to pass the data from QML to C++ and which is recognized by both.

            157

            1 Reply Last reply
            0
            • ? Offline
              ? Offline
              A Former User
              wrote on last edited by
              #14

              Okay but there is still syntax error in this
              @Component.OnCompleted:
              {

                }@
              
              1 Reply Last reply
              0
              • JKSHJ Offline
                JKSHJ Offline
                JKSH
                Moderators
                wrote on last edited by
                #15
                • Component.onCompleted is a signal handler.
                • onClicked is a signal handler.

                You cannot put a signal handler inside another signal handler. You need to move Component.onCompleted up one level, at least.

                Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

                1 Reply Last reply
                0
                • p3c0P Offline
                  p3c0P Offline
                  p3c0
                  Moderators
                  wrote on last edited by
                  #16

                  [quote author="JKSH" date="1424387370"]* Component.onCompleted is a signal handler.

                  • onClicked is a signal handler.

                  You cannot put a signal handler inside another signal handler. You need to move Component.onCompleted up one level, at least.
                  [/quote]

                  Right. I missed that one.

                  157

                  1 Reply Last reply
                  0
                  • ? Offline
                    ? Offline
                    A Former User
                    wrote on last edited by
                    #17

                    Okay but i have two call two c++ functions, and one should be called when the user clicks on the main image so i cant use component.oncompleted thn?

                    1 Reply Last reply
                    0
                    • p3c0P Offline
                      p3c0P Offline
                      p3c0
                      Moderators
                      wrote on last edited by
                      #18

                      Call that function in onClicked event handler. Component.onCompleted is called after the object has been instantiated. You can call the function inside it also but since you need to do it on click, call it inside onClicked.

                      157

                      1 Reply Last reply
                      0
                      • JKSHJ Offline
                        JKSHJ Offline
                        JKSH
                        Moderators
                        wrote on last edited by
                        #19

                        [quote author="Javeria" date="1424418592"]Okay but i have two call two c++ functions, and one should be called when the user clicks on the main image so i cant use component.oncompleted thn?[/quote]As the name implies, Component.onCompleted runs when the component has finished loading.

                        Do you want your function to be called when the component finishes loading?

                        Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

                        1 Reply Last reply
                        0
                        • ? Offline
                          ? Offline
                          A Former User
                          wrote on last edited by
                          #20

                          And also i have changed my detectsquare function's parameters to Qimage
                          so that i could use the current selected image in that function but i dont understand how i should do that in QML? As i cant use Qimage object in QML

                          1 Reply Last reply
                          0
                          • p3c0P Offline
                            p3c0P Offline
                            p3c0
                            Moderators
                            wrote on last edited by
                            #21

                            Since you already have paths, you can just send the path string from QML to C++ and then there access that image.

                            157

                            1 Reply Last reply
                            0
                            • ? Offline
                              ? Offline
                              A Former User
                              wrote on last edited by
                              #22

                              But I want to edit that image and send it back to qml so that it displays it in the ui

                              1 Reply Last reply
                              0
                              • p3c0P Offline
                                p3c0P Offline
                                p3c0
                                Moderators
                                wrote on last edited by
                                #23

                                Do you have paths for the Images in QML ?

                                If yes, then as said earlier, send the path string from QML to C++, open the image, process it, on C++ side(or whatever operations), then signal QML to display that image.

                                157

                                1 Reply Last reply
                                0
                                • JKSHJ Offline
                                  JKSHJ Offline
                                  JKSH
                                  Moderators
                                  wrote on last edited by
                                  #24

                                  Read the blog post and the comments at http://pusling.com/blog/?p=369

                                  Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

                                  1 Reply Last reply
                                  0
                                  • ? Offline
                                    ? Offline
                                    A Former User
                                    wrote on last edited by
                                    #25

                                    I have decided to use Qstring and i have followed this link to assign path:
                                    Link: http://doc.qt.io/qt-5/qtqml-cppintegration-exposecppattributes.html (The properties part)
                                    But im getting this error
                                    Invalid attached object assignment

                                    QQmlComponent: Component is not ready

                                    1 Reply Last reply
                                    0
                                    • ? Offline
                                      ? Offline
                                      A Former User
                                      wrote on last edited by
                                      #26

                                      @onClicked: {
                                      m.image=imagesListModel[index];
                                      main.source=m.imagesListModel[index]

                                                     // console.log("User select '"+"' image");
                                                   }@
                                      

                                      m is the Detectsquares object and i m setting the path and then assigning the path to the main image
                                      Here is the code im main.cpp:
                                      @
                                      QApplication app(argc, argv);
                                      // QQmlEngine eng;

                                      QQmlApplicationEngine engine;
                                      engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
                                      DetectSquares m;
                                      engine.rootContext()->setContextProperty("m",&m);
                                       QQmlComponent component(&engine, QUrl::fromLocalFile&#40;"qrc:/main.qml"&#41;);
                                       component.create();
                                      

                                      @

                                      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