1

たくさんのアイテムを含むリストウィジェットがあるとしましょう。ユーザーがスクロールしてさらにアイテムを表示すると、表示されているアイテムに対してアクションを実行したいと考えています。ユーザーアイテムによって現在表示されているイベント itemsViewedChanged(QListWidgetItems *items) をトリガーすることは可能ですか?

いいえの場合、どうすればこのようなものを実装できますか?

回答ありがとうございます

4

1 に答える 1

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() シグナルに接続します。そうすれば、ユーザーがビューをスクロールまたはサイズ変更すると、シグナルに反応して、現在表示されているアイテムのリストを収集します。

于 2012-08-17T17:24:09.643 に答える