처음에는 QListWidget :: itemChanged가 가야 할 길로 보이지만 곧 문제가 생깁니다. 신호는 삽입, 색상 변경, 상자 확인 및 그 밖의 "변경"을 위해 전송됩니다. 목! Predelnik은 그의 대답에서 그것을 지적했다. 어떤 사람들은 다양한 신호를 가로 채서 편집이 실제 이벤트인지 알아 내기 위해 모든 곳에서 플래그를 지정하고 필터링하려고했습니다. 그것은 매우 혼란스러워진다.
QAbstractItemModel :: dataChanged도 있습니다. 이는 좋은 해결책으로 보입니다. "const QVector & lstRoles"라는 매개 변수도 있으므로 Qt :: EditRole을 검사하여 실제로 편집되었는지 확인하십시오. 아아, catch가 있습니다. QListWidget :: itemChanged와 마찬가지로 모든 것이 호출되고 불행히도 QListWidget의 경우에는 roles 매개 변수가 호출 될 때 항상 비어 있습니다 (시도했습니다). 그 아이디어에 너무 많은 ...
다행히도, 아직 희망이 있습니다 ...이 솔루션은 속임수입니다! :
http://falsinsoft.blogspot.com/2013/11/qlistwidget-and-item-edit-event.html
그는 QAbstractItemDelegate :: closeEditor은 사용하지만, 나는 QAbstractItemDelegate :: commitData를 사용하여 선호합니다. 그래서
소위처럼 연결하게
...
connect(ui.pLstItems->itemDelegate(), &QAbstractItemDelegate::commitData, this, &MyWidget::OnLstItemsCommitData);
는 다음과 같은 슬롯을 구현 ...
이제
void MyWidget::OnLstItemsCommitData(QWidget* pLineEdit)
{
QString strNewText = reinterpret_cast<QLineEdit*>(pLineEdit)->text();
int nRow = ui.pLstItems->currentRow();
// do whatever you need here....
}
만하면 목록 항목의 텍스트 호출되는 슬롯이 있습니다 편집되었습니다!
모델의'dataChanged' 신호를 참조하십시오. –
@DmitrySazonov 그 덕분에, 고마워! – thnkwthprtls