Извините за громоздкий заголовок.
У меня есть класс, содержащий QListWidget
. Я подключил его сигнал itemSelectionChanged()
к пользовательскому слоту.
Когда я вызываю QListWidget::clear()
, слот вызывается (как и ожидалось), но вызов QListWidget::count()
в этом слоте возвращает количество элементов, которые QListWidget
имел раньше.
Вызов count()
сразу после вызова clear()
(когда сигнал был обработан, как описано) возвращает правильное число 0
.
Я подготовил полный демонстрационный проект. Наиболее важным является этот исходный файл:
#include "ListWidgetTest.hpp"
#include "ui_ListWidgetTest.h"
#include <QDebug>
ListWidgetTest::ListWidgetTest(QWidget* parent)
: QWidget(parent), ui(new Ui::ListWidgetTest)
{
ui->setupUi(this);
for (int i = 0; i < 5; ++i) {
QListWidgetItem* item = new QListWidgetItem(QString("Item %1").arg(i));
ui->listWidget->addItem(item);
}
QObject::connect(ui->pushButton, SIGNAL(clicked()),
this, SLOT(clearList()));
QObject::connect(ui->listWidget, SIGNAL(itemSelectionChanged()),
this, SLOT(selectionChanged()));
}
ListWidgetTest::~ListWidgetTest()
{
delete ui;
}
void ListWidgetTest::clearList()
{
qDebug() << "void ListWidgetTest::clearList()";
ui->listWidget->clear();
qDebug() << "clearList: ui->listWidget->count() is " << ui->listWidget->count();
}
void ListWidgetTest::selectionChanged()
{
qDebug() << "void ListWidgetTest::selectionChanged()";
qDebug() << "selectionChanged: ui->listWidget->count() is " << ui->listWidget->count();
}
Вывод
void ListWidgetTest::clearList()
void ListWidgetTest::selectionChanged()
selectionChanged: ui->listWidget->count() is 5
clearList: ui->listWidget->count() is 0
Что происходит
- Список заполняется.
- Каждый щелчок по элементу вызывает
selectionChanged()
- Щелчок по кнопке вызывает
clearList()
- Вызов
QListWidget::clear()
также генерирует сигнал, и слот вызывается - Количество элементов пока не изменилось