文档章节

qml与C++(使用c++扩展qml)

TemetNosce
 TemetNosce
发布于 2017/04/03 14:23
字数 403
阅读 69
收藏 0

##使用 setContextProperty,是将对象或数据暴露给 QML,一般默认就是全局单例。 函数原型

void QQmlContext::setContextProperty(const QString &name, QObject *value)
void QQmlContext::setContextProperty(const QString &name, const QVariant &value)

eg:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.rootContext( )->setContextProperty(
                "Greeting",
                QObject::tr( "Hello QML from C++" ) );//变量,qml中直接就可用此属性的值

    engine.rootContext( )->setContextProperty(
                "CPlusPlusClass",
               new CPlusPlusClass() );//对象,此处new的时候创建对象了
    //setContextProperty,在qml中是全局的
    engine.load(QUrl(QStringLiteral("qrc:///main.qml")));

    return app.exec();
}

qml中就可以使用了

Window {
    title: qsTr("Hello World")
    width: 640
    height: 480
    visible: true
    Text {
        id: text
        text: Greeting //直接就可以使用了此属性了
        anchors.centerIn: parent
    }
    Button {

        anchors.top: text.bottom
        text: "CPlusPlusClass.method()"
        MouseArea {

            anchors.fill: parent
            onClicked: {
                CPlusPlusClass.method()//调用类中的方法
            }
        }
    }
//    Greeting{// 不可以

//    }
}

##使用qmlRegisterType 注册类型到qml中

函数原型
template<typename T>
int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName);

eg

// 1C++类类型到QML类型系统中,qml要访问类中的数据,需要把数据添加到qt元对象系统中去
qmlRegisterType<CPlusPlusClass>(  			//CPlusPlusClass c++类名
                "CPlusPlus.Test",           // 统一资源标识符  
                1,                          // 主版本  
                0,                          // 次版本  
                "CPlusPlusType" );          // QML类名称  

//2导入类型
import CPlusPlus.Test 1.0 // 分别对应于 qmlRegisterType参数的:统一资源标识符 ,主次版本

//3qml中使用
CPlusPlusType { 
//CPlusPlusType对应于qmlRegisterType参数的QML类名称 
//注:在此处CPlusPlusType才实例化.
}

##使用qmlRegisterSingletonType() 注册单例类型到qml中(实例化实在c++中实例化的) 函数原型

int qmlRegisterSingletonType(const char *uri, int versionMajor, int versionMinor, const char *typeName, QJSValue(* ) ( QQmlEngine *, QJSEngine * ) callback)
int qmlRegisterSingletonType(const char *uri, int versionMajor, int versionMinor, const char *typeName, QObject *(* ) ( QQmlEngine *, QJSEngine * ) callback)
int qmlRegisterSingletonType(const QUrl &url, const char *uri, int versionMajor, int versionMinor, const char *qmlName)

© 著作权归作者所有

共有 人打赏支持
TemetNosce
粉丝 1
博文 48
码字总数 24514
作品 0
成都
程序员
私信 提问
Qt设计模式(第二版):谁最需要本书?

情人节前夕,突然受邀作为本书中文版的审校,心中在惊喜之余,也有些诚惶诚恐。能与闫老师(yfx2003)合作,共同学习与探讨,确是一件幸事;但是自己真的能胜任该工作么?一开始心里还真是没底...

晨曦之光
2012/05/08
2.5K
0
Qt5 路线?

从 Qt 官方刚发布的blog Thoughts about Qt 5我们可以了解到下一版 Qt 的动向。 愿景 Qt 5.0 will be the foundation for a new way of developing applications. While offering all of th......

晨曦之光
2012/05/08
794
0
QML入门教程之 Hello world

QML是什么? QML是一种描述性的脚本语言,文件格式以.qml结尾。语法格式非常像CSS(参考后文具体例子),但又支持javacript形式的编程控制。 它结合了QtDesigner UI和QtScript的优点。QtDesig...

红薯
2011/06/02
943
0
Qt Creator 2.4.0 beta 发布

Qt Creator 2.4 beta 发布。该版本包括了许多大大小小的改进,以及一些新功能。 根据Qt博客的Eike Ziller介绍,最诱人的功能/改进无疑是新增的“同步声明及定义”功能。使用该功能,当要改变...

小卒过河
2011/10/21
1K
2
qml component is not ready

困扰很久的Component is not ready问题,网络上有很多种介绍的解决办法,但是都是未能真正的解决问题。现在就根据本人的使用情况简单的讨论分析。 提示Component is not ready有以下几种情况...

洋碱
2018/06/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Windows同步对象Event和Linux的条件变量

最近在看一些同步对象模拟的东东,特别对在Windows下如何模拟条件变量折腾了很久。 1 Windows同步对象Event 微软有一个很有意思的同步对象,某种程度上和Linux的条件变量很相似。但秉承微软一...

shzwork
16分钟前
1
0
从上往下打印出二叉树的每个节点,同层节点从左至右打印。

//第一种做法 public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList <Integer> li=new ArrayList<Integer>(); ArrayList <TreeN......

南桥北木
26分钟前
1
0
linux 服务管理 Crontba、Ntpdate、Logrotate、Supervisor

crond linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。 另外, 由于使用者自己也可以设置计划任务,所以,...

狼王黄师傅
56分钟前
3
0
Sobel算子和Scharr滤波器

Sobel算子在数学上的本质是微分,对离散信号,是求邻域内的增量。 基本原理:在图像上,对图像信号在某点进行微分,表示图像的某个特征(如,强度、色调或者饱和度)在该点的变换程度。以强度...

yepanl
今天
2
0
Jenkins API 使用

Jenkins 是一款流行的开源持续集成工具,可以用来做一些软件开发的自动化工作,如打包,测试,自动部署等。 Jenkins 中有 view 和 job 的概念, view 相当于组, job 则是具体的任务。 view...

YanWen
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部