1
比方說,我有一個listwidget包含大量項目。當用戶滾動查看更多項目時,我想對正在查看的項目執行操作。是否有可能觸發一個事件itemsViewededChanged(QListWidgetItems *項目)給我目前由用戶項目查看?QListWidget獲取所查看項目的列表
如果不是,我該如何實現這樣的東西?
感謝您的任何答案
比方說,我有一個listwidget包含大量項目。當用戶滾動查看更多項目時,我想對正在查看的項目執行操作。是否有可能觸發一個事件itemsViewededChanged(QListWidgetItems *項目)給我目前由用戶項目查看?QListWidget獲取所查看項目的列表
如果不是,我該如何實現這樣的東西?
感謝您的任何答案
我不知道預先存在的方法,在QTreeWidget類似處理的圖標爲加載唯一可見的物品,但是我已經實現的東西,一般的技術,我會用對於QListWidget將是一個有點簡單(原諒語法,我通常使用PyQt的,所以這可能在C++關閉):
QList<QListWidgetItem*> MyListWidget::visibleItems() {
QList<QListWidgetItem>* output = new QList<QListWidgetItem*>();
// make sure we have some items
if (!this->count()) {
return output;
}
// calculate the beginning and end items in our range
QListWidgetItem* minimumItem = this->itemAt(5, 5);
QListWidgetItem* maximumItem = this->itemAt(5, this->height() - 5);
if (!minimumItem) { minimumItem = this->item(0); }
if (!maximumItem) { maximumItem = this->item(this->count() - 1); }
// get the start and end rows
int minimum_row = this->indexForItem(minimumItem)->row();
int maximum_row = this->indexForItem(maximumItem)->row();
for (int row = minimum_row; row <= maximum_row; row++) {
output->append(this->item(row));
}
return output;
}
這將讓你列表插件的可見項目的列表。要在用戶正在編輯時動態檢查和修改內容,可以連接到列表窗口小部件的valueChanged(int)和rangeChanged()信號。這樣,當用戶滾動或調整視圖大小時,您將對信號作出反應並收集現在可見的項目列表。
非常感謝!我會看看,我會告訴你,如果這解決了我的問題:) – hakermania 2012-08-18 06:55:49
錯誤,我沒有任何valueChanged(int)或rangeChanged()插槽我的listwidget ... – hakermania 2012-08-18 09:10:37
對不起 - 這些信號在QListWidget verticalScrollbar,而不是列表部件本身 - listWidget() - > verticalScrollBar() – 2012-08-18 15:47:50