我们一般开发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->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;lt;qtextcodec.h&amp;gt;
#include &amp;lt;qresource.h&amp;gt;
#include &amp;lt;qstring.h&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中实现拖拽文件(示例实现图片拖拽)