用QML创建 QQuickWindow

来源:互联网 发布:java.net.encode 编辑:程序博客网 时间:2024/04/28 02:45

首先我们来看下 Qt向导创建的例子

选择 菜单文件->新建文件或项目->Qt Quick Application->QtQuick2.3

向导就为我们创建了一个hello world  main.cpp 俺就介绍了,下面是自动生成的qml文件,我增加了注释


import QtQuick 2.3import QtQuick.Window 2.2//简单的类型与属性,不再注释。Window{    //这里的Window实际上就是实例化了一个QQuickWindow对象,    //看起来像定义一个C++类,其实不是 这里是定义一个对象,    //只不过我们没有给这个对象起名字,在QML里面,用id来访问。    visible: true   //显示状态为显示    width: 360      //窗体宽度为360像素    height:360      //窗体高度为360像素    MouseArea    {       //MouseArea 从Item继承过来,负责鼠标交互区域,    //MouseArea 实例化了一个对象        anchors.fill: parent    //anchors就是父类Item的成员变量,但在帮助文档里面没有写到,应该是QQuickItem类型。                                //后面我会详细介绍它。                                //anchors.fill: parent布局器将父窗口的整个区域填充        onClicked:        {        //鼠标单击事件            Qt.quit(); //退出Qt程序        }    }    Text    {         //它也从Item继承过来的        text: qsTr("Hello World")   //text是Text类型的成员变量,类型是string,                                    //qsTr是函数名字,大概就是字符串的意思        anchors.centerIn: parent //布局器不说了    }}

这个运行的界面就不用介绍了,和其他程序创建的hello world差不多,但这个东东没有实用价值呀,下面我本着学习的态度,进行了修改,自定义了一个树叶子窗体。下面是运行效果图:

哈哈,那片叶子就是我的窗口啦


下面是在hello world基础上修改后的Qml文件

import QtQuick 2.3import QtQuick.Window 2.2//简单的类型与属性,以后可能会省略。Window{    //这里的Window实际上就是实例化了一个QQuickWindow对象,    //看起来像定义一个C++类,其实不是 这里是定义一个对象,    //只不过我们没有给这个对象起名字,在QML里面,用id来访问。    id:mainwindow    visible: true   //显示状态为显示    width: 110      //窗体宽度为360像素    height:110      //窗体高度为360像素    flags:Qt.FramelessWindowHint |      //隐藏框框,标题栏等          Qt.WindowSystemMenuHint |     //隐藏系统菜单          Qt.WindowMinimizeButtonHint   //隐藏最大化最小化按钮    color: "transparent" //颜色设置为透明色    Image//定义一个图片,目的是填充整个主界面    {        z:0 //z可以理解为层数        anchors.fill:parent //填满        source: "qrc:/images/realLeaf1.png"//这是那个树叶子图片,如果不会加载图片的同学自己研究下啊,我这篇文章不做介绍啦    }    MouseArea    {    //MouseArea 从Item继承过来,负责鼠标交互区域,    //MouseArea 实例化了一个对象        anchors.fill: parent    //anchors就是父类Item的成员变量,但在帮助文档里面没有写到,应该是QQuickItem类型。                                //后面我会详细介绍它。                                //anchors.fill: parent布局器将父窗口的整个区域填充        property point clickPos: "0,0"//定义一个 point 类型        acceptedButtons: Qt.LeftButton | Qt.RightButton//接收鼠标左键和右键按钮,默认是接收所有鼠标按钮        onClicked:        {             if (mouse.button == Qt.RightButton)//鼠标右键单击                 Qt.quit(); //退出Qt程序             else//鼠标左键单击                 ;         }        onDoubleClicked:        {        //双击事件        //打开另一个qml        }        onPressed:        {            //鼠标按下            clickPos  = Qt.point(mouse.x,mouse.y)        }        onPositionChanged:        {           //鼠标偏移量           var delta = Qt.point(mouse.x-clickPos.x, mouse.y-clickPos.y)           //如果mainwindow继承自QWidget,用setPos           mainwindow.setX(mainwindow.x+delta.x)//设置界面的新位置,实现拖拽功能           mainwindow.setY(mainwindow.y+delta.y)        }    }}





0 0
原创粉丝点击