#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 */
}