QListWidget Как вызвать событие, как только я достигну конца QListWidget

#qt

#qt

Вопрос:

В QListWidget есть много элементов. Я хочу вызвать событие, как только я достигну конца списка. Как я могу сделать?

Комментарии:

1. Что вы имеете в виду, когда достигаете конца списка? Вы имеете в виду, что вы нажимаете на последний индекс QListWidget?

Ответ №1:

 #include <QListWidget>
#include <QScrollBar>
#include <QWidget>

class Widget: public QWidget
{
    Q_OBJECT
    public:
          Widget(QWidget* parent = 0);
    private:
          QListWidget *listWidget;
          QScrollBar *verticalScrollBar;
    private slots:
          void onScrollBarValueChanged(int);
    signals:
          void signalToEmit();
}

Widget::Widget(QWidget *parent):QWidget(parent)
{
    listWidget = new QListWidget(this);   
    verticalScrollBar = listWidget.verticalScrollBar();
    connect(verticalScrollBar,SIGNAL(valueChanged(int)),
    this,SLOT(onScrollBarValueChanged(int)));
}

void Widget::onScrollBarValueChanged(int value)
{
    if(value == verticalScrollBar->maximum())
        emit signalToEmit();
}
  

Комментарии:

1. Извините, что мой вопрос выше не совсем ясен. Что мне нужно, так это переместить полосу прокрутки (или курсор) в QListWidget (не прикасаться к какому-либо элементу). когда полоса прокрутки дойдет до конца, она вызовет событие.

Ответ №2:

Три года спустя, но я искал ответ на этот вопрос и придумал простой способ: D

Может быть, это не так «чисто», но вот пожалуйста:

 QListWidget* mylist;

QScrollBar* scrollBar = mylist->findChildren<QScrollBar*>().at(1);
    /* position 0 -> horizontal */
    /* position 1 -> vertical   */
connect(scrollBar, SIGNAL(valueChanged(int)), this, SLOT(ScrollBarChanged(int)));
  

Теперь вы создаете слот:

 void TabWebView::ScrollBarChanged(int value)
{
    QScrollBar *sender = (QScrollBar*)QObject::sender();

    if (sender->maximum() == value)
        /* Do Things */
}