View Full Version : سوال: نمایش مدل پیچیده در QML
returnx
شنبه 25 بهمن 1393, 16:40 عصر
فرض کنید شما مدلی به عنوان پست دارید که در این مدل لیستی از tag یا comment به صورت مدلی دیگر وجود دارد مانند شکل زیر :
128459
(در مفهومی ساده تر لیستی از شی ها که هر شی خودش دارای لیستی از اشیا می باشد.)
با فرض اینکه مدل بالا در C++ پیاده شده باشد ( Tags یک مدل جدا گانه در نظر گرفته شده و در مدل پست لیستی از ان ایجاد شده) ، چطور میشه در QML به اندیس های Tag دسترسی داشت و نمایش داد!؟
حامد مصافی
پنج شنبه 30 بهمن 1393, 13:00 عصر
من قبلا چنین کاری انجام دادم. اما در این مورد سوال شما کمی گنگ بود
من در سمت ++C یک کلاس مشتق شده از QAbstractListModel ایجاد کردم که برای نگهداری اطلاعات از اون استفاده میکردم.
سپس در سمت qml همون کلاس رو به عنوان model یک ListView معرفی کردم و آیتمهاشو نمایش دادم.
Tag list رو هم از نوع QQmlListProperty تعریف کن. به این ترتیب در سمت qml با model.tag_list بهش دسترسی داری
returnx
پنج شنبه 30 بهمن 1393, 14:18 عصر
ممنون از پاسخگویی ، نمایش دادن لیستی از اشارگر ها به QObject بدون مشکل انجام میشد اما به لیستی که عضو شی مورد نظر بود کمی مسئله را پیچیده می کرد که خوشبختانه حل شذ من لیست را با تابع :
return QVariant::fromValue(m_posts_list);
به Qvarint تبدیل میکنم و با ساخت Context Property ، بهشون دسترسی پیدا می کنم ، تا اینجا مشکلی نبود اما چطور در QML به فیلد Tags دسترسی پیدا می کردم جای سوال داشت که دقیقا مثل روش قبل tag ها را پاس میدم و در QML هم با استفاده از یک Repeater و یک Delegate دیگه نمایششون میدم به عنوان test :
import QtQuick 2.2
import QtQuick.Window 2.1
import QtQuick.Controls 1.2
Window {
id:container_window
visible: true
width: 360
height: 360
title: "Profile"
color: "steelblue"
property bool get_profile_status :false
onActiveChanged:
{
if (get_profile_status==false)
{
//Profile_Action.get_profile();
//Profile_Summery_Action.get_profile_summery();
Posts_Action.get_posts_stream();
get_profile_status=true
}
}
ListView
{
id:posts_list_view
anchors.horizontalCenter: parent.horizontalCenter
height: 400
width: 300
spacing: 5
clip: true
delegate: posts_delegate
}
Component
{
id: posts_delegate
Item {
height: 300
width: 175
Rectangle {
id: post_rect
color: "#272822"
width: 200
height: 150
Text {
id: post_content_txt
color: "yellow"
clip: true
width: 200
wrapMode: Text.WordWrap
anchors.topMargin: 10
text: qsTr(modelData.text)
}
}
Text {
id: comment_count_txt
anchors.top: post_rect.bottom
anchors.topMargin: 5
text: "author: " + String(modelData.author.first_name + " " + modelData.author.last_name)
}
Row {
id:tag_row
spacing: 5
anchors.top:comment_count_txt.bottom
anchors.topMargin: 5
Repeater {
model: modelData.tags
delegate: tags_delegate
}
}
Row
{
spacing: 5
anchors.top: tag_row.bottom
anchors.topMargin: 5
TextField {
id: comment_txt
width: 150
}
Button
{
id: send_btn
text: "send"
}
}
}
}
Component
{
id:tags_delegate
Rectangle {
width: 20; height: 20
border.width: 1
color: "yellow"
Text {
id:tag_caption
anchors.centerIn: parent
text: modelData.name
onWidthChanged:
{
parent.width=width +10
}
}
}
}
}
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.