假设我有一个包含很多项目的列表小部件。当用户滚动查看更多项目时,我想对正在查看的项目执行操作。是否可以触发事件 itemsViewedChanged(QListWidgetItems *items) 给我当前查看的用户项目?
如果没有,我该如何实现这样的事情?
感谢您的任何回答
假设我有一个包含很多项目的列表小部件。当用户滚动查看更多项目时,我想对正在查看的项目执行操作。是否可以触发事件 itemsViewedChanged(QListWidgetItems *items) 给我当前查看的用户项目?
如果没有,我该如何实现这样的事情?
感谢您的任何回答
我不知道预先存在的方法,但是我在 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() 信号。这样,当用户滚动或调整视图大小时,您就会对信号做出反应并收集现在可见的项目列表。