Registering a type makes the QML code not work
-
Hello,
I am working on something where I have a class called "FloatingMenu" (that is supossed to manage a menu in C++) and its QML alter-ego for the GUI in a file FloatingMenu.qml.
I have a file main.qml where I have a few rectangles and a FloatingMenu, and it shows up as expected.
Now, if I do qmlRegisterType<FloatingMenu>("EasyGraph", 1,0, "FloatingMenu"); in my main.cpp, the graphical part of the FloatingMenu juts desappears.Here is my code:
@int main(int argc, char* argv[]){
QGuiApplication app(argc, argv);
//Register all the needed types in QML.
qmlRegisterType<FloatingMenu>("EasyGraph", 1,0, "FloatingMenu");//The only window known as QDeCView in QML.
QQuickView* view = new QQuickView();
view->setMinimumHeight(100);
view->setMinimumWidth(100);
view->setResizeMode(QQuickView::SizeRootObjectToView);//Context, to set properties from c++ to QML
//QQmlContext* cxt = view->rootContext();//Load the base.
view->setSource(QUrl::fromLocalFile("../qml/MainWindow.qml"));
view->show();//FloatingMenu* menu = view->rootObject()->findChild<FloatingMenu*>("mainMenu"); //When registered, this works
return app.exec();
}
@and:
@#ifndef FLOATINGMENU_H
#define FLOATINGMENU_H#include <QQuickItem>
#include "GraphicalNode.hpp"class FloatingMenu : public QQuickItem {
Q_OBJECT
Q_PROPERTY(GraphicalNode* target READ target WRITE setTarget NOTIFY onTargetNodeChanged)
private:
GraphicalNode* _target;
public:
FloatingMenu(QQuickItem* p = NULL);
GraphicalNode* target() const;
void setTarget(GraphicalNode* n);signals:
void onTargetNodeChanged(GraphicalNode*);
};#endif
#include "FloatingMenu.hpp"
FloatingMenu::FloatingMenu(QQuickItem* p) : QQuickItem(p), _target(NULL){
setFlag(QQuickItem::ItemHasContents, false); //I tried true and false here. what should it be? It has content, but I don't want to draw it from the C++ side.
}GraphicalNode* FloatingMenu::target() const {
return _target;
}void FloatingMenu::setTarget(GraphicalNode* n) {
_target = n;
}@
my MainWindow.qml:
@import EasyGraph 1.0
import QtQuick 2.0Rectangle {
width: 400; height: 400
color: "#333333"Flickable {
id: flickable
anchors.fill: parent
width: 400; height: 400FloatingMenu{
objectName: "mainMenu"
id: menu
}}
}@
and finally, FloatingMenu.qml:
@import EasyGraph 1.0
import QtQuick 2.0Rectangle {
width: 30; height: 30
color: "red"
}@I have no idea what I am doing wrong, I dont see how its not working!
The only think I want to do is to bind a QML object with a class and let the QML be the drawing part... I guess I am missing a little option or something... -
Can you show the application output pls?!
Most often you can find the mistake there! ;)Regards
-
Hi, thanks for your answer.
There is no output (no error messages or anything).
I forgo to post my main.qml code. I just updated my previous post! :) -
Oh, I think I found the mistake:
You have a FloatingMenu.qml and then you call:
@qmlRegisterType<FloatingMenu>("EasyGraph", 1,0, "FloatingMenu");
@
Don't you have two types with the same name then?! ;)Regards
-
Thanks Dot97.
I tried what you said, but it didn't work... (I remaned everything in QML to FloatingMenuQML).. I think it is ok to have that with two names....
So I still have the problem...Thanks again anyway!