1.在一个组件创建完成时执行一个函数,可以使用Component.onCompleted:{ // 这里可以执行JSP操作 }
------------------------------------------------------------------------------------------------------------------------------------------
2.操作字符串:
问题描述: 将url的一部分和images的一项进行组合成新的url
url: http://img.fun-guide.mobi/show?src=http://qa.fun-guide.mobi:8080/tm/images/hb/735-20110802142308.jpg&w=140
images: /images/jz/735-1-20110802142309.jpg,/images/jz/735-2-20110802142309.jpg
过程:主要使用Jsp的split("xx", n)来进行字符串分隔,其中xx代表分隔处的字符串,n是一个数字,表示要返回的子字符串的个数。
步骤1: 分解字符串
var contextImages = data.movie[i].pics;
// 获取/images/jz/735-1-20110802142309.jpg,/images/jz/735-2-20110802142309.jpg ,这里的data是网上获取的JSON格式的数据
var tempArray = new Array; // 新建数组,jsp的语法
tempArray = contextImages.split(",", 2); //2表示返回两个字符串
结果:将/images/jz/735-1-20110802142309.jpg,/images/jz/735-2-20110802142309.jpg
分解为了/images/jz/735-1-20110802142309.jpg和/images/jz/735-2-20110802142309.jpg,它们分别放在tempArray[0]和tempArray[1]中
步骤2: 分离url
var tempString = url.split("/images", 1); // 1表示返回一个字符串
//url即/images/jz/735-1-20110802142309.jpg,/images/jz/735-2-20110802142309.jpg
console.log(tempString)
结果:将http://img.fun-guide.mobi/show?src=http://qa.fun-guide.mobi:8080/tm/images/hb/735-20110802142308.jpg&w=140
中取出了http://img.fun-guide.mobi/show?src=http://qa.fun-guide.mobi:8080/tm
步骤3:重组url
var contentImage1 = tempString + tempArray[0];
var contentImage2 = tempString + tempArray[1];
------------------------------------------------------------------------------------------------------------------------------------------
3.问题描述:
TextArea部件怎么获取输入的字数,怎样限定输入的字符数?
比如我们要显示现在输入的字符数,然后最多只可以输入50个字符。
TextArea{
id:textarea
onTextChanged: {
if(textarea.text.length > 5)
{
//substr and length are javastrip's string method
textarea.text = textarea.text.substr(0,5);
cursorPosition = 5;
}
}
}
------------------------------------------------------------------------------------------------------------------------------------------
4. Loading等待组件
Image {
id: loading; source: "images/loading.png"
NumberAnimation on rotation {
from: 0; to: 360; running: loading.visible == true; loops: Animation.Infinite; duration: 900
}
}
------------------------------------------------------------------------------------------------------------------------------------------
5.减慢视图切换速度:highlightMoveDuration属性
Additionally, ListView inherits from Flickable, making the list respond to mouse drags and other gestures. The last portion of the
code above sets Flickable properties to create the desired flicking movement to our view. In particular,the property
highlightMoveDuration changes the duration of the flick transition. A higher highlightMoveDuration value results in slower menu
switching.
------------------------------------------------------------------------------------------------------------------------------------------
6.实现一个按钮
Rectangle {
//identifier of the item
id: button
//these properties act as constants, useable outside this QML file
property int buttonHeight: 75
property int buttonWidth: 150
//attaches to the Text element's text content
property string label
property color textColor: buttonLabel.color
//the color highlight when the mouse hovers on the rectangle
property color onHoverColor: "lightsteelblue"
property color borderColor: "transparent"
//buttonColor is set to the button's main color
property color buttonColor: "lightblue"
property real labelSize: 14
//set appearance properties
radius:6
smooth: true
border.width: 2
border.color: borderColor
width: buttonWidth; height: buttonHeight
Text{
id: buttonLabel
anchors.centerIn: parent
text: label //bind the text to the parent's text
color: "#DCDCCC"
font.pointSize: labelSize
}
//buttonClick() is callable and a signal handler, onButtonClick is automatically created
signal buttonClick()
//define the clickable area to be the whole rectangle
MouseArea{
id: buttonMouseArea
anchors.fill: parent //stretch the area to the parent's dimension
onClicked: buttonClick()
//if true, then onEntered and onExited called if mouse hovers in the mouse area
//if false, a button must be clicked to detect the mouse hover
hoverEnabled: true
//display a border if the mouse hovers on the button mouse area
onEntered: parent.border.color = onHoverColor
//remove the border if the mouse exits the button mouse area
onExited: parent.border.color = borderColor
}
//change the color of the button when pressed
color: buttonMouseArea.pressed ? Qt.darker(buttonColor, 1.5) : buttonColor
//animate the color whenever the color property changes
Behavior on color { ColorAnimation{ duration: 55} }
//scale the button when pressed
scale: buttonMouseArea.pressed ? 1.1 : 1.00
//Animate the scale property change
Behavior on scale { NumberAnimation{ duration: 55} }
}
------------------------------------------------------------------------------------------------------------------------------------------
7.文本编辑器,自动换行,滚动区域
Rectangle {
width: 600
height: 400
Flickable {
id: flick
y: 100
width: 600
height: 200
contentWidth: edit.paintedWidth
contentHeight: edit.paintedHeight
clip: true
flickableDirection: Flickable.VerticalFlick
function ensureVisible(r) {
if(contentX >= r.x)
contentX = r.x;
else if(contentX + width <= r.x + r.width)
contentX = r.x + r.width - width;
if(contentY >= r.y)
contentY = r.y;
else if(contentY + height <= r.y + r.height)
contentY = r.y + r.height - height
}
TextEdit {
id: edit
width: flick.width
height: flick.height
focus: true
wrapMode: TextEdit.Wrap
onCursorRectangleChanged: flick.ensureVisible(cursorRectangle)
// // 限制只输入5个字符
// onTextChanged: {
// if(edit.text.length > 5)
// {
// edit.text = edit.text.substr(0,5);
// cursorPosition = 5;
// }
// }
}
}
}
------------------------------------------------------------------------------------------------------------------------------------------
8.使用外部字体
FontLoader组件,E:\QtSDK\Examples\4.7\declarative\text\fonts\availableFonts示例程序
------------------------------------------------------------------------------------------------------------------------------------------
9.较长字体自动移动显示部件
import QtQuick 1.0
Rectangle {
width: 360
height: 640
Rectangle {
id: textBar
height: 30
width: 200
color: "yellow"
x: 20
y: 200
clip: true
Text {
id: myText
text: "你好北京!!!!!!!!!!!!!!!!!!"
font.pointSize: 15
}
MouseArea {
anchors.fill: parent
hoverEnabled: true
onEntered: { // 当鼠标悬停时开启定时器
textTimer.running = true
}
onExited: { // 当鼠标离开时停止定时器
textTimer.running = false
}
}
Timer { // 使用定时器来移动文本
id: textTimer
interval: 150
repeat: true
onTriggered: {
myText.x -= 2;
if(myText.x + myText.width + 30 <= textBar.x + textBar.width)
{
myText.x = 0;
}
}
}
}
}
------------------------------------------------------------------------------------------------------------------------------------------
10.抽屉部件:
import QtQuick 1.0
Rectangle {
width: 360
height: 640
ListModel { // 模型
id: model
ListElement {name: "北京"}
ListElement {name: "上海"}
ListElement {name: "广州"}
ListElement {name: "大连"}
ListElement {name: "西安"}
}
Component { // 代理
id: delegate
Item {
width: view.width
height: content.visible? content.height + xialaBar.height : xialaBar.height
Column {
anchors.fill: parent
BorderImage { // 控制条
id: xialaBar
property bool isShown: false
source: isShown? "./ee02.PNG" : "./ee01.PNG"
width: view.width
border.left: 40
border.right: 40
Text {
id: xialaText
text: name
color: "white"
font.pointSize: 10
anchors.left: parent.left
anchors.leftMargin: 50
anchors.verticalCenter: parent.verticalCenter
}
MouseArea {
anchors.fill: parent
onClicked: {
xialaBar.isShown = !xialaBar.isShown;
content.visible = !content.visible;
}
}
}
Item { // 内容区域,内嵌的列表
id: content
visible: false
width: view.width
height: 200
ListModel {
id: contentModel
ListElement {name: "商店1"}
ListElement {name: "商店2"}
ListElement {name: "商店3"}
ListElement {name: "商店4"}
ListElement {name: "商店5"}
}
Component {
id: contentDelegate
Text {
text: name
font.pointSize: 10
}
}
ListView {
id: contentView
anchors.fill: parent
model: contentModel
delegate: contentDelegate
clip: true
}
}
} // column
}// item
}
ListView { // 视图
id: view
anchors.fill: parent
model: model
delegate: delegate
clip: true
}
}
------------------------------------------------------------------------------------------------------------------------------------------
11.loading文字,汉字后面的点逐渐增多效果: loading. loading.. loading...
import QtQuick 1.0
Rectangle {
width: 360
height: 640
Image {
id: background
source: "./bg.png"
anchors.fill: parent
property int count: 1
Image {
id: loading
source: "./01.jpg"
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.bottom
anchors.bottomMargin: 70
}
Timer {
interval: 300
repeat: true
running: true
onTriggered: {
background.count ++;
if (background.count == 1) loading.source = "./01.jpg";
else if (background.count == 2) loading.source = "./02.jpg";
else if (background.count == 3) loading.source = "./03.jpg";
else if (background.count == 4) loading.source = "./04.jpg";
else if (background.count == 5) loading.source = "./05.jpg";
else if(background.count == 6) {
loading.source = "./06.jpg";
background.count = 0;
}
}
}
}
}
------------------------------------------------------------------------------------------------------------------------------------------
12.// meego禁止横屏
activitiesPage.orientationLock = PageOrientation.LockPortrait
------------------------------------------------------------------------------------------------------------------------------------------
13.// 等待图片下载时显示的动画图片
import QtQuick 1.1
import com.meego 1.0
Image {
id: image
property bool loading: status != Image.Ready
Image {
id: container
property bool on: false
source: "qrc:///images/busyLoading.png"
visible: loading
anchors.centerIn: parent
NumberAnimation on rotation {
running: loading; from: 0; to:360
loops: Animation.Infinite; duration: 2000
}
}
}
------------------------------------------------------------------------------------------------------------------------------------------
14.// 提示对话框
QueryDialog {
id: tishiDialog
icon: "image://theme/icon-l-contacts"
titleText: "您确定要退出吗?"
message: ""
acceptButtonText: "是"
rejectButtonText: "否"
onAccepted: {
Qt.quit();
}
onRejected: {
tishiDialog.close();
}
}
------------------------------------------------------------------------------------------------------------------------------------------
15.调出拨打电话界面:
QueryDialog {
id: queryBill
icon: "image://theme/icon-l-contacts"
titleText: "提示"
message: "确认拨打该电话吗?"
acceptButtonText: "确定"
rejectButtonText: "取消"
onAccepted: {
Qt.openUrlExternally("file:///home/user/MyDocs/a.vcf")
}
}
调用meego拨打电话接口来拨打指定的电话号码:
Qt.openUrlExternally("tel:" + phoneNum),phoneNum为一个指定的电话号码。
------------------------------------------------------------------------------------------------------------------------------------------
16.Meego自带的Loading动画(白色光圈)
Rectangle {
id: rectangle1
property string warningtext: "加载中..."
property bool show: false
anchors.fill: parent
color: "black"
visible: show
opacity: 0.7
focus: true
z:3
//forceActiveFocus:
BusyIndicator {
id:busy
visible: show
opacity: 1
anchors.centerIn: parent; running: show;
platformStyle: BusyIndicatorStyle {
size: "large"
period: 1000
numberOfFrames: 10
__invertedString: "inverted"
}
onRunningChanged: {
console.log("enter! BusyLoading!");
}
}
Text {
id: showText
text: warningtext
anchors.topMargin: 20
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: busy.bottom
font.bold: true
font.pointSize: 20
verticalAlignment: Text.AlignVCenter
color: "white"
}
MouseArea
{
anchors.fill: parent
onClicked: console.log("touch the screen! BusyLoading!")
}
}
------------------------------------------------------------------------------------------------------------------------------------------
17.Button部件使用
Button
{
id: btnNext
width: 100
height: 50
text: "下一页"
style: ButtonStyle {textColor:"white";pressedBackground:"qrc:///background1.png";background:"qrc:///background2.png"}
anchors.verticalCenter: parent.verticalCenter
enabled: currentindex < totalPage ? true : false
anchors.right: comp.right
anchors.rightMargin: 5
onClicked: {
currentindex++
requestnet(currentindex);
}
}
------------------------------------------------------------------------------------------------------------------------------------------
18.创建Meego工程后生成的文件,只有以下是必须的:
qml文件夹,各种cpp文件,h文件,pri文件,qrc文件,pro文件,图标文件等。
------------------------------------------------------------------------------------------------------------------------------------------
19.生成sis文件
步骤:
1.如果要想设置程序的名称为中文,那么要修改项目目录中的.loc 文件,将其中的名称改为中文,然后使用Utf8编码保存。并设置为只读(这个很
重要,不然编译后又变成以前的了)。
2.设置程序的Uid,公司,在手机的安装列表中显示的名称,可以使用siscontents软件的工具->编辑菜单,然后进行更改,最后另存为即可。
3.进行签名。使用DOSPY签名软件。默认在C盘的“签名工具”目录的Other目录中,将自己的sis文件,证书cer文件和key文件放入其中。然后在cer
文件上单击右键,选择“导入证书(替换)”,然后按回车即可。下一步,在sis文件上点击右键,选择“签名此文件”,选择2即导入的证书,然后
回车即可。最后会在该目录中生成已经签名的sisx文件。
4.如果进行了第3步,又要进行第2步,那么第2步会将签名废弃掉,这样需要重新进行第3步进行签名。
或者使用命令行:
qmake MerchantsBank.pro
make clean
make release-gcce
make sis QT_SIS_CERTIFICATE=*.cer QT_SIS_KEY=*.key
signsis My.SIS Signed.SIS tc.cer tc.key mypassword
查看:signsis.exe -o –p mysisfile.sis
http://www.developer.nokia.com/Community/Wiki/index.php?title=Symbian%E7%AD%BE%E5%90%8D%E7%94%A8%E6%88%B7%E6%8C%87%E5%8D
%97&diff=prev&oldid=112815
------------------------------------------------------------------------------------------------------------------------------------------
20.发布Meego程序
应用程序图标:在创建的项目目录中有两个图片文件,分别为64*64和80*80,将这两个图片替换掉即可。64*64用于程序列表,80*80的用于手机桌面显示。
应用程序包信息:在项目管理模式,选择运行页面,在这里可以更改“创建包”中的信息。包名称默认为小写(只能出现小写字母和下划线);下面是包的版本;再下面是包的简介,会在手机中程序列表里点击该软件时显示;下面是在程序列表中显示的名称,可以随意写;下面是在程序列表中的图标,可以选择项目目录中那个64*64的图片;最后是changelog文件,就是日志文件。
桌面上的应用程序名称:这里可以在项目中的Sephora_harmattan.desktop文件中进行更改。将name后的字符更改为要显示的名字即可,这里注意名称直接写就行,如果是中文,也直接写,不用加引号。最后在编辑菜单中选择文本编码,然后使用UTF-8编码将文件重新保存即可。
更改完毕后,可以清理一下项目,然后重新编译运行即可,选择release方式进行编译。
------------------------------------------------------------------------------------------------------------------------------------------
21.使用js替换字符串。
var text = "(0319)123 456";
var text1 = text.replace(new RegExp("\\(","gi"), "");
var text2 = text1.replace(new RegExp("\\)","gi"), "");
var text3 = text2.replace(new RegExp("\\ ","gi"), "");
console.log(text3);
这里使用了正则表达式来完成替换字符串text中的所有指定字符,如果不使用正则表达式,比如replace("2","3")这样只会替换第一个出现的数字2。正则表达式中的g表示替换整个字符串,i表示不区分大小写。
调用示例:
Rectangle {
width: 360
height: 360
Text {
text: "Hello World"
anchors.centerIn: parent
}
MouseArea {
anchors.fill: parent
onClicked: {
var number = replace("(0319)123 456")
console.log(number)
}
}
function replace(num) {
var text1 = num.replace(new RegExp("\\(","gi"), "");
var text2 = text1.replace(new RegExp("\\)","gi"), "");
var text3 = text2.replace(new RegExp("\\ ","gi"), "");
return text3;
}
}
------------------------------------------------------------------------------------------------------------------------------------------
22 生成uuid:
function basic_createUUID(){
var s = [];
var hexDigits = "0123456789ABCDEF";
for (var i = 0; i < 32; i++) {
s[i] = hexDigits.substr(Math.floor(new Date().getTime()*Math.random()%100/100 * 0x10), 1);
}
s[12] = "4";
s[16] = hexDigits.substr((s[16] & 0x3) | 0x8, 1);
var uuid = s.join("");
return uuid;
}
详见:// http://www.ietf.org/rfc/rfc4122.txt Section 4.4
------------------------------------------------------------------------------------------------------------------------------------------