我正在聊天系統上工作,我有一個會話頁面,裏面有列表視圖,列表視圖委託是文本會話。我想向會話代表添加已看到/未看到或已讀/未讀,由自定義模型生成的列表視圖,並且需要代理附加屬性等實際查看代理時發生更改的內容。有沒有附屬物告訴我每個代表物品的可見性狀態?獲取列表視圖委託的可見性狀態qml
回答
你有兩個問題需要解決:
- 如何存儲該消息已viewd
- 當將其設置爲讀取信息。
所以此起彼伏......
的delegate
內的自定義屬性沒有好主意,因爲存儲在其中的信息將會丟失,一旦delegate
將離開ListView
的視口,被銷燬。
最好的解決方案是將它存儲在ListView
的模型中。這種方式也有可能,如果model
有一定的持久性,那麼信息在應用程序重新啓動後仍然存在。
也許你可能會用下一個選項來實現我的目標,與Settings
結合使用,但我會考慮這個問題。
如果這是不可能的,並且信息不需要在應用程序重新啓動時存活,則需要考慮將其存儲在ListView
之外的方法。例如,您可以使用array
或object/dictionary
來存儲它(注意:無更改通知)。你也可以使用第二個ListView
,你保持同步(這可能不是那麼容易!)。
最後,你可能會把你的ListView
作爲一個模型在Instantiator
,它實例化簡單的QtObjects
與一個屬性:讀。
後者將其存儲的代表和模型之外的最簡單的方法,所以我會告訴你它是如何工作的:
Instantiator {
id: additionalInfo
model: customModel
delegate: QtObject {
property bool read // <--- This is a custom defined property
}
}
ListView {
model: customModel
delegate: MyDelegate {
onRead: additionalInfo.objectAt(index).read = true
Text {
text: additionalInfo.objectAt(index).read ? 'read' : 'unread'
}
}
}
現在第二部分:當它實際上可以讀
您已經發現的可見性問題。 Item
即使在listView
之外,它們也會在buffer
創建時可見。所以你不能使用這些信息。但是,你有以下信息:
- 的
listModel.contentItem
(x和y)的位置 - 的
delegate
的相對於listModel.contentItem
- 您
delegate
所以你可以這樣說:delegate
是完全可見的iff:
listModel.contentItem.x + delegate.x >= 0
listModel.contentItem.y + delegate.y >= 0
listModel.contentItem.y + delegate.y + delegate.height <= listModel.height
listModel.contentItem.x + delegate.x + delegate.width <= listModel.width
一個例子,對如何Item
會看一下它是可見的Flickable
(記住:一個ListView
IS一個Flickable
)可發現here
這是:如果可以讓整個代表與視圖。如果它更大 - 那麼當代表被認爲是閱讀時,你需要定義一些標準。
但同樣:如果有任何posibility把它作爲一個角色在你的model
,把它放在那裏!
你能解釋第二部分嗎?! –
如果你告訴我,具體什麼,當然。 – derM
我用你代表onYchanged提到的條件,但符合市場預期, 委託的ARE創建它沒有工作,即使他們沒有考慮到,所以我們需要檢查一些代表條件,目前都在視圖或不和也一個事件來檢查,那麼我應該使用什麼事件來正確地觸發委託組件中的列表視圖輕彈? –
- 1. 有任何可能使用QML替換視圖中的委託?
- 2. 委託模態視圖swift
- 3. 沒有選項可見列獲取角度智能表狀態
- 4. QML:委託的索引屬性不被認可的console.log()
- 5. NSNotification或委託註冊時,可見視圖更改
- 6. 委託子視圖
- 7. 在列表視圖中更改文本視圖的可見性
- 8. Asp.net:委託(「行動」)可以序列化爲控制狀態?
- 9. 從視圖中委託的臨時表
- 10. 獲取state_machine狀態列表
- 11. 如何從annonymus委託獲取屬性
- 12. QML列表視圖Overscrolls
- 13. 獲取視圖的可見區域
- 14. 獲取視圖的可見高度
- 15. Android - 獲取視圖的可見區域?
- 16. 取消註冊DelegateCommand /獲取使用的委託命令列表
- 17. 設置列表視圖列元素的可見性
- 18. 獲取視圖狀態錯誤的JMeter
- 19. 獲取可用的Drupal視圖列表
- 20. 更改列表視圖中圖像的可見性
- 21. WKWebView滾動視圖委託
- 22. Backbone.LayoutManager委託視圖事件
- 23. Android的列表視圖中不可見
- 24. QML:如果委託中的條件?
- 25. 在某個點獲取可見視圖
- 26. 在pageController中獲取可見視圖
- 27. 我可以從通用委託獲取方法屬性嗎?
- 28. 獲取視圖模型屬性的模型狀態鍵
- 29. ASP.NET設置和獲取視圖狀態中的屬性
- 30. 如何獲取scrollView.keyboardDismissMode委託?
嗯,還有就是'visible'屬性,它告訴你無論是可見還是隱藏。否則,您可能需要定義自定義屬性並將其自行設置。 – DuKes0mE
我查看了可見性,但當代理不完全可見時,可見性變爲true,請讓其更清楚地瞭解自定義屬性? –
看看[QML屬性](http://doc.qt.io/qt-5/qtqml-syntax-objectattributes.html#property-attributes)。基本上,你可以在通常的屬性之外定義你自己的屬性。例如,你可以爲你的用例定義'property bool isRead'。爲了設置該屬性,您需要定義自己的信號處理程序,以相應地調整您的QML對象。一種方法是:使用ListView的indexAt()方法來檢測你的委託是否可見。或者使用ListView的邊界框跟蹤代表位置。 – DuKes0mE