对不起,笨重的标题。
我有一个包含QListWidget
. 我将它的itemSelectionChanged()
信号连接到自定义插槽。
当我调用QListWidget::clear()
时,插槽被调用(如预期的那样),但QListWidget::count()
在此插槽中的调用返回QListWidget
之前拥有的项目数。
调用 tocount()
之后的调用clear()
(当信号按描述处理时)返回正确的 number 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()
也发出信号并且插槽被调用 - 商品数量没有变化