2013-12-23 4 views
0

QListWidget에서 모든 항목을 지우려고 할 때 응용 프로그램이 충돌하고 적어도 하나의 항목이 선택됩니다. clearSelection()을 호출하면 프로그램이 충돌하기도합니다 (clearSelection() 호출시). while 루프에서 항목을 제거하면 충돌이 발생합니다. 오류 메시지가QListWidget은 항목을 선택하는 동안 clear()가 호출 될 때 충돌을 발생시킵니다.

ASSERT 수 있습니다 : 파일 /usr/include/qt4/QtCore/qlist.h에서 "! IsEmpty 함수()", 라인 (282)

일부 예제 코드 :

void MainWindow::clearListWidget() 
{ 
    // ui->listWidget->clearSelection(); // --> causes crash 
    // ui->listWidget->clear();   // --> also causes crash 
    while(ui->listWidget->count()>0)  // --> no crash calling count() 
     ui->listWidget->takeItem(0);  // --> crash again 
} 

언급 한 것처럼 응용 프로그램은 항목을 선택하면 충돌합니다. 아무 것도 선택하지 않으면 위의 방법이 의도 한대로 작동합니다. 나는 우분투에서 Qt 4.8.4로 작업한다.

문제를 해결할 수있는 제안에 대해 감사드립니다.

+0

전체 코드를 해당 컨텍스트로 표시하십시오. 또한 디버거가 충돌을 일으키는 정확한 줄을 알려주는 데 도움이됩니다. –

+0

'QListWidget'을 사용하는 간단한 테스트 케이스가 그것을 재현하지 않기 때문에 여러분이 보여주지 않는 코드가 문제가됩니다. 따라서 문제를 재현 할 수있는 최소한으로 남을 때까지 코드를 자르려면 반드시 시작해야합니다. –

답변

2

나는 혼자 해결책을 찾았습니다. 이 문제는 itemSelectionChanged() 신호에 연결된 슬롯 메소드에서 선택된 항목에 액세스하여 발생하는 것으로 보입니다. 여기에 예를 들면 호출하여 내 질문에 설명 된대로 충돌이 나타난 이후

string text = ui->listWidget->selectedItems().first()->text().toStdString(); 

를 통해 선택한 항목의 텍스트를 액세스 명확한(). 선택한 항목이 이미이 시점에서 이미 액세스 된 경우 itemSelectionChanged()가 발생하고 QListWidget이 다소 혼란스러워 질 때 선택 프로세스가 완료되지 않은 것 같습니다. itemClicked (QListWidgetItem *)로 신호를 대체 한 후에는 응용 프로그램이 더 이상 충돌하지 않습니다.