我们一般开发QML界面,不会将整界面写在一个QML文件中,会将一个界面拆分成多个QML文件,主界面一般使用小写开头的名字(否则可能加载不出来),本文介绍使用QQuickWidget加载QML以后,多个QML文件嵌套以后,如何在QT中找到单个的QML对象,然后进行方法的调用

void qtInvokeQml()\
    m_quickView  = new QQuickWidget(/*父类自己给*/)
    // 1.只有一个根qml的方法调用
    QMetaObject::invokeMethod(m_quickView->rootObject(),
                              "qmlFunction", 
                              Q_ARG(QVariant, str));
    // 2.rectangleObj是qml中设定的objectName,和id类似
    // 这种写法适合于嵌套的QML的查找
    QQuickItem *item = m_quickView->rootObject()->
            findChild<QQuickItem*>("rectangleObj");
    if (item == nullptr) {
        return;
    // "qmlFunction" 是qml中的方法
    // str是这个方法的参数,类型必须为QVariant
    QMetaObject::invokeMethod(item,
                              "qmlFunction",
                              Q_ARG(QVariant, str));
				
(1)在代码,动态创建的一些控件,先通过setObjectName(“XXX”); 用QDesigner创建的界面,就已经设置了setObjectName (2)再通过findChild QLabel *macLabel = new QLabel(this); macLabel-&gt;setObjectName("mac"); //查找这个控件的时候 QLabel *macLabe...
  一个QML作为主页面的软件,它的主QML页面加载有两种方式,一种是利用QQuickView作为容器加载,另一种是使用 QQmlApplicationEngine引擎加载。下面就详细看下这两种方式。 方式1,使用qmlengine加载 #include <QGuiApplication> #include <QQmlApplicationEngine> int main(int argc, char *argv[]) QGuiApplication app(ar 虽然做QT开发一直使用的是QWidget,但是了解QML也有一段时间了,加之以前做过Javascript开发几个月时间,对Javascript有一定的基础,最近一直想学习下QML相关内容。 QML内容之多,想入门得有个契入点,我选择了*.qml文件的加载方式,对此做了个基本尝试。 一、qml加入qrc资源文件 如果不考虑发布后qml文件修改,能不用重新打包生效qml文件里面的改动,可以考虑把qml加入qrc资源文件,编译的时候就在.exe里。 二、动态加载qml 1.QtQuick工 QML文档始终以UTF-8格式编码。 Imports 文档必须导入必要的模块或类型名称空间,以使引擎能够加载文档引用的QML对象类型。默认情况下,文档可以访问通过.qml同一目录的文件定义的任何QML对象类型。如果文档需要引用任何其他对象类型,则必须导入已将这些类型注册到的类型名称空间。 #include #include &amp;amp;lt;qtextcodec.h&amp;amp;gt; #include &amp;amp;lt;qresource.h&amp;amp;gt; #include &amp;amp;lt;qstring.h&amp;amp;gt; #include “csigleton.h” 1.2 注册c++类到qml import "./CommonComponent":导入同级目录的CommonComponent 文件夹 import "../CommonPane" :导入上级目录的CommonPane 在上面的代码,我们定义了一个外部的 ListView,它的 model 属性绑定了一个名为 outerModel 的数据模型。然后我们在外部 ListView 的 delegate 再定义一个 ListView,并将它的 model 属性绑定到一个名为 innerModel 的数据模型。这样,就可以在外部 ListView 显示内部 ListView,即每个外部 ListView 的 delegate 都包含了一个 ListView。 请注意,这里的代码仅是一个示例,您需要根据自己的需要进行相应的调整和修改。 vs2017编译qt project失败moc:Unknown compiler flavor ‘msvc;msvc‘; valid values are: msvc, unix. QT中实现拖拽文件(示例实现图片拖拽)