读书人

QtQuick项目界面跳转怎样实现,该如何处

发布时间: 2012-04-10 21:03:56 作者: rapoo

QtQuick项目界面跳转怎样实现
想要模拟手机屏幕的设计,点击不同按键打开不同界面,并能对界面进行操作。
我个人目前只会实现到点击不同按键打开相同界面,想向各位请教一下
下面是我的代码,再怎样实现,求解决
main.qml
import QtQuick 1.0
import com.nokia.symbian 1.0
import "connect"//引入connect进行关联

Window {
id: window

StatusBar {
id: statusBar
width: 360
height: 45
anchors.top: window.top
}
Rectangle {
id: bluetooth
x: 0
y: 45
width: 360; height: 595
color: "black"
ListModel {
id:viewModel
ListElement {title: "开启蓝牙"}
ListElement {title: "本机可见性"}
ListElement {title: "配对设备"}
ListElement {title: "我的手机名"}
ListElement {title: "帮助"}
}
ListView {
id: listView
visible: true
anchors.fill: parent
model:viewModel//调用与之相关的model
delegate: ViewModel{}
}
}
}

ViewModel.qml
import QtQuick 1.0

Component {//组件
id: menuDelegate
Item {
id: menu
property real detailsOpacity : 0
width: listView.width
height: 70

Rectangle {
id: background
x: 2;
y: 2;
width: parent.width - x*2;
height: parent.height - y*2
color: "ivory"
border.color: "red"
radius: 5
}
MouseArea {//鼠标感应区
anchors.fill: parent
onClicked: menu.state = 'View';//当点击按键时执行View状态
}

Text {//主界面上的字体显示
text: title
font.bold: true;
verticalAlignment: Text.AlignVCenter;
horizontalAlignment: Text.AlignHCenter;
font.pointSize: 16
color: "blue"
}

states: State {
name: "View"
PropertyChanges {
target: menu;
detailsOpacity: 1;
x: 0
} //更改可见性,只使需要展现的menu可见
PropertyChanges {
target: menu;
height: listView.height
} //使点击的列图填满整个列表的详细视图

PropertyChanges {
target: menu.ListView.view;
explicit: true;
contentY: menu.y
} //移动单个列表位置,使其铺满整个视图
}
}
}


[解决办法]
Page Based Application Navigation是一个基于页面栈的导航功能,与滑屏无关。

楼主怎么会做出只针对滑屏的判断呢?文档上在醒目的位置给出了Page Navigation with ToolBars的示例,这已经足够说明问题了。

楼主应该仔细阅读,并且进行一些试验。
[解决办法]
最简单的,当你点击比如蓝牙按钮的时候,你让你的蓝牙的界面的visible为ture,或者是设置其x或者y为适当的值,然后添加相应的动画就好了

可以参考我写的一个圣经阅读器:
https://gitorious.org/raamattu/raamattu
[解决办法]

探讨

我会更改一些属性之类的,关键是不会他们之间怎样关联起来

------解决方案--------------------


还是与时俱进吧,坦率的讲我现有的项目中也并没有使用Qt Quick Components,因为当时在做的时候还没有这个东西。

其实页面跳转的方法有很多,我使用的方法类似:

把你的menuDelegate中的鼠标感应区改成这样:

C/C++ code
onClicked: {    // 创建对象    var object = Qt.createComponent("Bluetooth.qml").createObject(window)    object.title = "蓝牙设置页面,点击关闭"}
[解决办法]
像LS说的那样的动态创建页面需要注意一下该页面的创建时间,如果需要的时间太长,就会造成用户体验效果不好。对于那样的页面只有在程序初始化的时候创建:(
[解决办法]
跑了一下楼主的程序,终于知道楼主的问题在哪里了,楼主对代理的理解还不够。

我把你的VidwModel.qml的代码改了,再加上我原来给出的代码,全了,楼主自己看看你原来的问题到底出在哪里吧。

C/C++ code
import QtQuick 1.0Component {    id: menuDelegate    Rectangle {        x: 2        width: parent.width - x * 2        height: 70        radius: 5        border.color: "red"        Text {            anchors.fill: parent            text: title            font.bold: true;            verticalAlignment: Text.AlignVCenter;            horizontalAlignment: Text.AlignHCenter;            font.pointSize: 16            color: "blue"        }        // 鼠标区域        MouseArea {            anchors.fill: parent            onClicked: {                if (title == "开启蓝牙")                {                    // 创建对象                    var object = Qt.createComponent("TestPage.qml").createObject(window)                    object.title = "蓝牙设置页面,点击关闭"                }            }        }    }}
[解决办法]
探讨

跑了一下楼主的程序,终于知道楼主的问题在哪里了,楼主对代理的理解还不够。

我把你的VidwModel.qml的代码改了,再加上我原来给出的代码,全了,楼主自己看看你原来的问题到底出在哪里吧。

C/C++ code

import QtQuick 1.0

Component {
id: menuDelegate

Rectangle {
x: 2
……

[解决办法]
探讨

zhu_xz兄你说的也许是个问题,但我在实际开发中感觉没有太大的时间代价。当然,如果这个qml是在网上而不是在本地就另当别论了。

读书人网 >QT开发

热点推荐