QListWidget获取已查看项目的列表

时间:2012-08-17 15:06:25

标签: qt qlistwidget

假设我有一个包含大量项目的listwidget。当用户滚动查看更多项目时,我想对正在查看的项目执行操作。是否可以触发一个事件itemsViewedChanged(QListWidgetItems * items),它给我当前用户项目查看的内容?

如果不是,我该如何实现这样的东西呢?

感谢您的回答

1 个答案:

答案 0 :(得分:1)

我不知道预先存在的方法,但是我在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()信号。这样,当用户滚动或调整视图大小时,您就会对信号做出反应并收集现在可见的项目列表。