我正在处理一个名为"FloatingMenu“的类(该类用于管理C++中的菜单)及其在FloatingMenu.qml文件中的GUI的QML自我。我有一个文件main.qml,其中有几个矩形和一个FloatingMenu,它如预期的那样显示。现在,如果我执行qmlRegisterType("EasyGraph",1,0," FloatingMenu ");在EasyGraph中,FloatingMenu突出的图形部分消失了。
这是我的代码:
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();
}以及:
#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;
}我的MainWindow.qml:
import EasyGraph 1.0
import QtQuick 2.0
Rectangle {
width: 400; height: 400
color: "#333333"
Flickable {
id: flickable
anchors.fill: parent
width: 400; height: 400
FloatingMenu{
objectName: "mainMenu"
id: menu
}
}
}最后,FloatingMenu.qml:
import EasyGraph 1.0
import QtQuick 2.0
Rectangle {
width: 30; height: 30
color: "red"
}我不知道我做错了什么,我不知道它怎么不起作用。我唯一想做的就是用类绑定一个QML对象,并让QML成为绘图部分.我想我错过了一个小小的选择或者什么能让它发挥作用的东西。
提前感谢!
发布于 2014-04-19 10:41:42
导入模块EasyGraph时,可以隐藏文件FloatingMenu.qml。将其更改为SomeFloatingMenu.qml并使用您的FloatingMenu项:
import EasyGraph 1.0
import QtQuick 2.0
FloatingMenu {
Rectangle { width: 30; height: 30 color: "red" }
}现在使用您的SomeFloatingMenu,它是在qml组件中创建的c++类:
import QtQuick 2.0
Rectangle {
width: 400; height: 400; color: "#333333"
Flickable {
id: flickable; anchors.fill: parent; width: 400; height: 400;
SomeFloatingMenu { objectName: "mainMenu"; id: menu }
}
}发布于 2014-09-12 14:33:14
您有FloatingMenu C++组件和FolatingMenu.qml,它也是一个组件。因此,当您在导入FloatingMenu 1.0的qml文件中写入EasyGraph {}时,将找到并使用该c++ qml组件。
https://stackoverflow.com/questions/23168475
复制相似问题