Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. Problem adding a custom control Quick using QQmlApplicationEngine instance [solved]

Problem adding a custom control Quick using QQmlApplicationEngine instance [solved]

Scheduled Pinned Locked Moved QML and Qt Quick
7 Posts 4 Posters 7.9k 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.
  • T Offline
    T Offline
    tcmichals
    wrote on last edited by
    #1

    I'm trying to add a simple custom control using one of the code examples; but I must be doing something wrong when trying to adding it to a QtQuickControls based QML .

    Output from running the app:
    QQmlApplicationEngine failed to load component
    qrc:/main.qml:78 Cannot assign to non-existent property "quickPluginCtrl"

    Error: Your root item has to be a Window.

    The qml editor kicks this out:
    Invalid property name

    Here is the code main.cpp:
    @#include <QtQml>
    #include <QtQuick/QQuickView>
    #include <QtCore/QString>

    #include <QtGui/QGuiApplication>
    #include "quickpluginctrl.h"

    int main(int argc, char *argv[])
    {
    QGuiApplication app(argc, argv);

    qmlRegisterType<quickPluginCtrl>("Charts", 1, 0, "quickPluginCtrl");
    
    
    QQmlApplicationEngine engine(QUrl("qrc:/main.qml"));
    QObject *topLevel = engine.rootObjects().value(0);
    QQuickWindow *window = qobject_cast<QQuickWindow *>(topLevel);
    if ( !window ) {
        qWarning("Error: Your root item has to be a Window.");
        return -1;
    }
    window->show();
    return app.exec&#40;&#41;;
    

    }
    @
    quickpluginctrl.cpp
    @#include "quickpluginctrl.h"

    quickPluginCtrl::quickPluginCtrl(QQuickItem *parent) :
    QQuickItem(parent)
    {
    }

    @

    file quickpluginctrl.h

    @#ifndef QUICKPLUGINCTRL_H
    #define QUICKPLUGINCTRL_H

    #include <QQuickItem>

    class quickPluginCtrl : public QQuickItem
    {
    Q_OBJECT
    public:
    explicit quickPluginCtrl(QQuickItem *parent = 0);

    signals:

    public slots:

    };

    #endif // QUICKPLUGINCTRL_H
    @

    main.qml
    @import QtQuick 2.1
    import QtQuick.Controls 1.0
    import QtQuick.Layouts 1.0
    import Charts 1.0

    ApplicationWindow {
    title: "Basic layouts"
    property int margin: 11
    width: mainLayout.implicitWidth + 2 * margin
    height: mainLayout.implicitHeight + 2 * margin
    minimumWidth: mainLayout.Layout.minimumWidth + 2 * margin
    minimumHeight: mainLayout.Layout.minimumHeight + 2 * margin

    ColumnLayout {
        id: mainLayout
        anchors.fill: parent
        anchors.margins: margin
        GroupBox {
            id: rowBox
            title: "Row layout"
            Layout.fillWidth: true
    
            RowLayout {
                id: rowLayout
                anchors.fill: parent
                TextField {
                    placeholderText: "This wants to grow horizontally"
                    Layout.fillWidth: true
                }
                Button {
                    text: "Button"
                }
            }
        }
    
        GroupBox {
            id: gridBox
            title: "Grid layout"
            Layout.fillWidth: true
    
            GridLayout {
                id: gridLayout
                rows: 3
                flow: GridLayout.TopToBottom
                anchors.fill: parent
    
                Label { text: "Line 1" }
                Label { text: "Line 2" }
                Label { text: "Line 3" }
    
                TextField { }
                TextField { }
                TextField { }
    
                TextArea {
                    text: "This widget spans over three rows in the GridLayout.\n"
                        + "All items in the GridLayout are implicitly positioned from top to bottom."
                    Layout.rowSpan: 3
                    Layout.fillHeight: true
                    Layout.fillWidth: true
                }
            }
        }
        TextArea {
            id: t3
            text: "This fills the whole cell"
            Layout.minimumHeight: 30
            Layout.fillHeight: true
            Layout.fillWidth: true
        }
        Item {
            id:tim
            Layout.minimumHeight: 150
            Layout.fillHeight: true
            Layout.fillWidth: true
    
            quickPluginCtrl
            {
                width: 100
                height: 100;
                id: ctrl
            }
    
            Text {
                anchors { bottom: parent.bottom; horizontalCenter: parent.horizontalCenter; bottomMargin: 20 }
                text: "timmm"
            }
        }
    
        ProgressBar {
            id: progress_bar1
            x: 106
            y: 356
        }
    
        Slider {
            id: slider__horizontal_1
            x: 106
            y: 385
        }
    }
    

    }

    @

    1 Reply Last reply
    0
    • B Offline
      B Offline
      bobweaver
      wrote on last edited by
      #2

      I know that this might not solve what you are trying to do but have you looked at the examples/docs for qtquick.window ?

      http://qt-project.org/doc/qt-5.0/qtquick/qquickwindow.html

      http://qt-project.org/doc/qt-5.0/qtquick/qmlmodule-qtquick-window2-qtquick-window-2.html

      1 Reply Last reply
      0
      • T Offline
        T Offline
        tcmichals
        wrote on last edited by
        #3

        yes, trying to do it the same way. I was following the example for text (examples/quick/controls/text) and custom geometry. I was trying make a simple example based in a QQuickItem.

        Code compiles, etc.. but there is something basic I'm missing..

        1 Reply Last reply
        0
        • T Offline
          T Offline
          tcmichals
          wrote on last edited by
          #4

          OK.. I went and added my QQuickItem to a working example, text and get the same issue:

          tarting /home/tcmichals/Qt/5.1.0/gcc_64/examples/quick/controls/build-text-Desktop_Qt_5_1_0_GCC_64bit-Debug/text...
          QML debugging is enabled. Only use this in a safe environment.
          QQmlApplicationEngine failed to load component
          qrc:/qml/main.qml:345 Cannot assign to non-existent property "vtyGraphQT"

          Error: Your root item has to be a Window.

          1 Reply Last reply
          0
          • S Offline
            S Offline
            sohail
            wrote on last edited by
            #5

            I wonder if the object being returned to you is your pluginCtrl object. You should inspect it and see. If so, maybe you should loop over all the rootObjects until you find the one that casts successfully to QQuickWindow

            1 Reply Last reply
            0
            • T Offline
              T Offline
              tcmichals
              wrote on last edited by
              #6

              OK that was a simple fix for some reason, qml requres the first letter to be capitalized for the name that is register to QML. Once I changed that, everything works.

              1 Reply Last reply
              0
              • C Offline
                C Offline
                chrisadams
                wrote on last edited by
                #7

                Yes, all QML typenames must begin with a capital letter. The error that qmlRegisterObject() reports could be improved to make this obvious, I guess. Please file a bug report.

                Cheers,
                Chris.

                1 Reply Last reply
                1

                • Login

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