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