PDA

View Full Version : سوال: تبدیل مقادیر داخل حلقه به آرایه در qml



ravand
یک شنبه 11 بهمن 1394, 17:59 عصر
سلام
برنامه زیر را امتحان کنید:

import QtQuick 2.3
import QtQuick.Window 2.2
Window {
visible: true
width: 50
height: 50
property var word:[]
Component.onCompleted: {
for (var i = 0; i < 15; ++i) {
word+=i
print(typeof(word))
}
}
}

من میخوام مقدار متغییر word که شامل مقادیر داخل حلقه هست به آرایه تبدیل بشه. ولی نمیدونم چطوری این کار رو بکنم؟
متشکرم.

حامد مصافی
یک شنبه 11 بهمن 1394, 19:25 عصر
پراپرتی word به صورت آرایه تعریف شده. متوجه نمیشم، مشکل چیه؟احتمالا در خط ۱۰ باید بنویسید:
word.push(i);

ravand
یک شنبه 11 بهمن 1394, 20:08 عصر
پراپرتی word به صورت آرایه تعریف شده. متوجه نمیشم، مشکل چیه؟احتمالا در خط ۱۰ باید بنویسید:
word.push(i);
من عمدا کدم رو گذاشتم تا شما راحت امتحان کنید.
نوع متغییر با این خط به شما نمایش میده:
print(typeof(word))
اگه برنامه رو اجرا کنید می نویسه string
من میخوام آرایه باشه.

ravand
یک شنبه 11 بهمن 1394, 20:20 عصر
وقتی اینطوری کردم نوشت object

import QtQuick 2.3
import QtQuick.Window 2.2
Window {
visible: true
width: 50
height: 50
property var name:new Array
property var word:new Array
Component.onCompleted: {
for (var i = 0; i < 15; ++i) {
name+=i
word.push(name);
print(typeof(word))
}
}
}

مشکل من اینه که مقدار متغییر word با این آرایه در خط زیر متفاوته:
word=["ali","ahmad"]
من این تفاوت رو با کد زیر فهمیدم:
import QtQuick 2.3
import QtQuick.LocalStorage 2.0
import QtQuick.Controls 1.1
Rectangle {
id: page2
property var word:new Array
property var namee:new Array

width: 360
height: 360

Column {
id: row
spacing: 5;

Component.onCompleted:{
var db = LocalStorage.openDatabaseSync("ravandi", "1.0", "The Example QML SQL!", 1000000);
db.transaction(
function(tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS jadval(id integer primary key autoincrement not null,`name` varchar(40),`last` varchar(40))');
tx.executeSql("insert into jadval (name,last) values('mohammad','ravandi')");
var rs = tx.executeSql('SELECT * FROM jadval');
for(var i = 0; i < rs.rows.length; i++) {
namee +=rs.rows.item(i).name
//word=["ali","ahmad"]
print(typeof(namee))
word.push(namee);
print(word)
}


}
)

}

Repeater {
id: repeater
model: word;
delegate: Rectangle {
width:100
height:30
border.color: "red"
border.width: 1
Text{
id:matn
anchors.centerIn: parent
text: modelData
}
}
}
}

}

الان مقدار word که به model داده میشه کار نمیکنه. یعنی مقدار بهش داده نمیشه ولی اگه بیایم و این خط رو به جاش بدیم:
word=["ali","ahmad"]
برنامه کار میکنه و مقادیر داخل مستطیل ها در پنجره نمایش داده میشه.
چرا؟

حامد مصافی
دوشنبه 12 بهمن 1394, 09:04 صبح
این خط‌ها رو
namee +=rs.rows.item(i).name
//word=["ali","ahmad"]
print(typeof(namee))
word.push(namee);
print(word)

تبدیل کنید به:
word.push(rs.rows.item(i).name);

ravand
دوشنبه 12 بهمن 1394, 09:10 صبح
این خط‌ها رو
namee +=rs.rows.item(i).name
//word=["ali","ahmad"]
print(typeof(namee))
word.push(namee);
print(word)

تبدیل کنید به:
word.push(rs.rows.item(i).name);
این کار رو کردم هیچ فرقی نمیکنه.
باید مقادیر را داخل مستطیل در پنجره نمایش بده ولی نمیده!

ravand
دوشنبه 12 بهمن 1394, 10:51 صبح
اومدم این خط رو اضافه کردم مشکلم حل شد. امیدورام دگه مشکلی پیش نیاد:
repeater.model = word
import QtQuick 2.3
import QtQuick.LocalStorage 2.0
import QtQuick.Controls 1.1
Rectangle {
id: page2
property var word:new Array
property var namee:new Array

width: 360
height: 360

Column {
id: row
spacing: 5;

Component.onCompleted:{
var db = LocalStorage.openDatabaseSync("ravandi", "1.0", "The Example QML SQL!", 1000000);
db.transaction(
function(tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS jadval(id integer primary key autoincrement not null,`name` varchar(40),`last` varchar(40))');
tx.executeSql("insert into jadval (name,last) values('mohammad reza','ravandi')");
var rs = tx.executeSql('SELECT * FROM jadval');
for(var i = 0; i < rs.rows.length; i++) {
namee =rs.rows.item(i).name
word.push(namee);
print(word)
}

repeater.model = word
}
)

}

Repeater {
id: repeater
model: word;
delegate: Rectangle {
width:100
height:30
border.color: "red"
border.width: 1
Text{
id:matn
anchors.centerIn: parent
text: modelData
}
}
}
}
}

ravand
چهارشنبه 28 بهمن 1394, 06:03 صبح
مشکل جدیدی که پیدا کردم اینه که میخوام فیلد last را هم علاوه بر این فیلد name از جدول در دیتابیس بگیرم و نمایش بدم.
الان من یک Text دارم با id:matn میخوام کنارش یک Text دگه هم بذارم. یعنی داخل مستطیل دو تا Text باشه و مقادیر فیلد های name و last رو نشون بده. الان فیلد مقادیر name رو نشون میده. من نمیدونم چطوری این کار رو بکنم؟
هر چی توی نت سرچ زدم روش دگه ای نبود که بتونم ازش استفاده کنم.