부피가 큰 제목은 불편을 드려 죄송합니다.clear()가 호출되었을 때 itemSelectionChanged() QListWidget의 신호
나는 QListWidget
을 포함하는 클래스가 있습니다. itemSelectionChanged()
신호를 사용자 정의 슬롯에 연결했습니다.
QListWidget::clear()
을 호출하면 예상대로 슬롯이 호출되지만이 슬롯에 QListWidget::count()
을 호출하면 QListWidget
의 항목 수가 반환됩니다.
clear()
(신호가 설명 된대로 처리 된 경우) 호출 후 바로 count()
을 호출하면 올바른 번호 0
이 반환됩니다.
나는 a complete demo project을 준비했다.
- 목록이 채워 도착를 어떻게됩니까
#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
: 가장 중요한 역할을 한이 소스 파일입니다. 항목에
- 모든 클릭 버튼에 클릭이
clearList()
QListWidget::clear()
에 대한 호출은 또한 신호을 방출 - 를 호출하고 슬롯이 아직 변경되지 않았습니다 항목 수
- 을 호출되는
selectionChanged()
- 를 호출
신호 itemSelectionChanged()는 SLOT clear()을 호출하여 생성됩니다. Clear는 모든 항목을 제거하기 때문에 선택이 변경되고 따라서 신호가 방출됩니다. 그럼에도 불구하고 귀하의 솔루션은 가능하지만 문제를 설명하지는 않습니다. – HWende
내가 한 것은 분명히 버튼 클릭에 관한 것입니다. 그리고 SLOT (itemselectionchanged()에 해당)에서 lineedit.But에 아무 것도 표시되지 않은 횟수를 표시하는 코드를 넣었습니다. 그럼 내가 이걸 어떻게 추론해야합니까? 여기에 코드를 입력하십시오. – ScarCode
데모 프로젝트를 만들고 링크했습니다. – HWende