大雑把なタイトルで申し訳ありません。
を含むクラスがありQListWidget
ます。itemSelectionChanged()
その信号をカスタムスロットに接続しました。
を呼び出すとQListWidget::clear()
、(予想どおり) スロットが呼び出されQListWidget::count()
ますが、このスロットで を呼び出すと、以前に持っていたアイテムの数が返されますQListWidget
。
への呼び出しのcount()
直後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()
も信号を発信し、スロットが呼び出されます - アイテム数はまだ変更されていません