QQmlApplicationEngine示例都是放在main.cpp中实现的,但是我放在mainWindow.cpp中就没有作用。我想了很久都找不到问题所在。
-
一般情况都是这样子,在main.cpp中:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}但是我还了个法子写:在 main.cpp中 MainWindow w; w.show();
然后在 MainWindow 的构造函数中 添加:
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
这个就无法显示出来。我已经确定头文件,pro文件和qml文件的正确性,毕竟放在mian.cpp是正常的。所以我想请教下大家为什么我只能放在mian.cpp中呢?
-
你好哦,这个可能需要涉及到Qt Quick和Qt Widgets混合开发到问题了。可以采用的是
QQuickView
来做。
当然QQuickView
本身包含了一个内部的QQmlEngine
。
-
@jiangcaiyang
是啊,我现在就是在做C++
和QML
的混合部分,因此接触到了QML
。现在我的确放弃了用QQmlEngine
,改用QQuickView
。但是QQuickView
里面不能使用Window
而是改用Item
。不知道在后面我混合开发的时候,吧QWidget
的东西挪成QQuickView
增加难度或者不必要的麻烦呢
-
@闷瓜叔叔 不会有太多的难度,现在看来,除了顶层QML改为
Item
外,其它的和纯Qt Quick
开发并无二致。你还可以兼容两种开发方式,绝大部分QML都可以通用,一方面可以单独成为窗口,另一方面可以嵌入现有的窗口。
-
@jiangcaiyang 真的是太谢谢啦。现在刚入手QML有太多的不习惯和疑问了。初次来这个论坛,觉得这个论坛好多设计都很有意思呢。
-
@闷瓜叔叔 对吧,本论坛是一种新型的论坛,和那种Discuz论坛不太一样。你可以尝试一下,手机端访问都是非常自如的呢。
-
是由于对象析构的原因
QQmlApplicationEngine::~QQmlApplicationEngine()
Destroys the QQmlApplicationEngine and all QML objects it loaded.
可采用new的方式试试
-
@lowbees 我是不怎么推荐将
QQmlApplicationEngine
放在堆上。因为这东西不是那种不确定什么时候用的,不管是Quick应用还是Quick结合Widgets的应用,QQmlApplicationEngine
几乎是必须使用的组件。
-
@jiangcaiyang Quick结合Widgets一般不用这个,Quick的话还是用这个舒服
-
@lowbees 这么说也是。不过也就是几行代码的事情。