Problem adding a custom control Quick using QQmlApplicationEngine instance [solved]
-
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 nameHere 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();}
@
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.0ApplicationWindow {
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 * marginColumnLayout { 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 } }}
@
-
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
-
-
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.
-
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.