현재 이미지 옆에 뉴스 스 니펫을 표시하는 앱의 일부로 작업 중입니다 (이미지가있는 경우). 이 뉴스 목록은 SegmentedControl "탭"페이지의 일부이며 사용자가 필요에 따라 숨기거나 다시 표시 할 수 있습니다. 이미지는 네트워크를 통해로드되므로 ImageTracker가 처리하고 완전히로드 된 속성으로 만 설정됩니다.ListView를 숨기고 다시 표시 할 때 이미지가 사라짐
내가 가지고있는 문제는 다른 SegmentControl "탭"으로 이동 한 다음 뉴스 탭으로 다시 이동하면 이러한 이미지가 처음로드 될 때 이미지가 사라지는 것입니다. 숨기기 작업은 비활성 컨테이너의 가시성을 false로 설정하고 활성 컨테이너의 가시성을 true로 설정하여 수행됩니다. ListView에 { ID : lstShowNews 개체 이름 : "lstShowNews"
listItemComponents: [
ListItemComponent {
type: "item"
Detail_Tabs_NewsCell {
newsHeadline: ListItemData.headline
newsBlurbPreview: ListItemData.content
newsTimeAdded: ListItemData.time
newsImageVisible: ListItemData.hasImage
newsImage: ListItemData.image
}
}
]
}
별명/사용자 정의 목록 항목의 속성 :
property alias newsImageVisible: newsImage.visible
property alias newsHeadline: newsTitle.text
property alias newsImage: newsImage.image
property string newsBlurbPreview: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam condimentum tellus vel magna dapibus aliquam. Nunc iaculis metus ut arcu tempus semper."
property string newsTimeAdded: "News Source - 3 hours ago"
이 내가 데이터 바인딩을 정의하고있어 어떻게
목록로드를 처리하는 C++ 코드 섹션 :
/*!
* Handles loading for each tab page. Enables data to only be loaded on demand.
* @param index - The new selected index on the SegmentedControl
*/
void MyClass::onSegmentChanged(int index) {
if(index == 2) {
if(!mNewsLoaded) {
// Load the news
NewsRequester* news = new NewsRequester(mId);
connect(news, SIGNAL(requestDone(QList<NewsItem*>)), this, SLOT(onNewsReceieved(QList<NewsItem*>)));
indNews->start(); // Activity indicator
news->requestNews();
}
else {
// Caching functions
}
}
else {
// Stuff for other tabs
}
}
void MyClass::onNewsReceieved(QList<NewsItem*> newsItems) {
qDebug() << "Received news reply";
indNews->stop();
indNews->setVisible(false);
mNewsItems = newsItems;
setNewsModel();
}
void MyClass::setNewsModel() {
GroupDataModel* newsModel = new GroupDataModel(QStringList() << "news");
newsModel->setGrouping(ItemGrouping::None);
// Move the list items to the data model
for(int i = 0; i < mNewsItems.size(); i++) {
mNewsItems.at(i)->loadImage();
newsModel->insert(mNewsItems.at(i));
}
ListView* lstNews = root->findChild<ListView*>("lstShowNews");
lstNews->setDataModel(newsModel);
}
mLocalCascadesImage에 대한
/*!
* Tracks the status of the current local image and displays when ready
*/
void NewsItem::trackImage() {
// Load cascades image
mTracker = new ImageTracker(mLocalImage);
connect(mTracker, SIGNAL(stateChanged (bb::cascades::ResourceTracker::State)),
this, SLOT(onStateChanged (bb::cascades::ResourceTracker::State)));
}
/*!
* Passes the downloaded image's path to the list
*/
void NewsItem::onImageRetrieved(QString path) {
//qDebug() << "Received image " << path;
mLocalImage = QUrl(path);
trackImage();
}
/*!
* Display the image if it's been fully loaded in memory
*/
void NewsItem::onStateChanged(bb::cascades::ResourceTracker::State state) {
if(state == bb::cascades::ResourceTracker::Loaded) {
qDebug() << "Image loaded";
mLocalCascadesImage = mTracker->image();
emit localImageChanged();
}
}
속성 : 이미지를 추적하고 목록에 전달되기 전에 제대로 장전 보장
기능
Q_PROPERTY(bb::cascades::Image image READ localImage NOTIFY localImageChanged)
리스트 뷰가에 무례한 행동을 할 이유에 어떤 이유가 있나요 이 방법? 감사.