Как получить событие selectionchange в Qt - PullRequest
7 голосов
/ 18 марта 2010

У меня есть класс, унаследованный от QWidget, теперь в этом классе я буду создавать объект QListView и заполнять элементы для просмотра. Когда выбор элементов в представлении списка изменяется, я хочу получить событие selectionChange.

Как мне этого добиться? Пожалуйста, скажи мне вкратце.

Ответы [ 2 ]

10 голосов
/ 18 марта 2010

Когда у вас есть вид, у вас будет модель, которая будет использоваться для выбора элемента. Это называется QItemSelectionModel.

Например, с помощью QListView вы можете получить selectionModel следующим образом:

QItemSelectionModel* selectionModel() const;

Теперь из этой модели вы сможете подключаться по множеству сигналов:

void currentChanged ( const QModelIndex & current, const QModelIndex & previous )
void currentColumnChanged ( const QModelIndex & current, const QModelIndex & previous )
void currentRowChanged ( const QModelIndex & current, const QModelIndex &    previous )
void selectionChanged ( const QItemSelection & selected, const QItemSelection & deselected )

Я думаю, это тебе немного поможет!

0 голосов
/ 18 марта 2010

https://doc.qt.io/archives/qt-4.8/qlistwidget.html Возможно, вы захотите использовать QListWidget вместо view, я не помню конкретных причин, но этот класс имеет эти сигналы, которые вы хотите использовать.


https://doc.qt.io/archives/qt-4.8/qlistwidget.html#itemSelectionChanged Это сигнал, к которому нужно подключиться.

Сделайте слот в объявлении вашего класса:

 private slots:
     void selChanged();

Заполните этот слот тем, что вы хотите сделать при изменении выбора. Подключите сигнал к этому слоту где-нибудь в вашем классе - возможно, в конструкторе вашего производного QWidget.

 connect(yourListWidget, SIGNAL(itemSelectionChanged()), this, SLOT(selChanged()));

Вот и все

...