2014-10-29 4 views
2

레이블 문자열을 클릭하여 QCheckBox를 토글 할 수 있습니다. 이렇게하면 사용자가 편안하게 큰 클릭 타겟을 확보 할 수 있습니다.Qt - 텍스트를 클릭하여 QListWidgetItem을 토글하는 방법

그러나 체크 가능한 항목이있는 QListWidget이있는 경우 사용자는 항목을 토글하려면 작은 상자 안쪽을 클릭해야합니다. 이것은 반복적 인 스트레스 상해로 우리들에게 지루하고 심지어 약간 고통스러운 항목을 체크합니다.

QListWidget itemClicked 신호에 연결하여 항목 체크 박스를 전환 해 보았습니다. 사용자가 항목 텍스트를 클릭하면 잘 작동합니다. 그러나 실제로 상자를 클릭하면 체크 상태가 토글되고 itemClicked 신호가 전송되며 코드는 체크 상태를 원래 상태로 토글합니다.

누구나 체크 박스 또는 항목 텍스트를 클릭하여 체크 상태를 토글하는 방법을 제안 할 수 있습니까?

감사합니다 ...

답변

1

QListWidgetItem는 사용자가 클릭, 라벨 또는 상자, 그래서 가장 쉬운 방법은 위젯으로 QCheckBox을 사용하는 것입니다 않은 위치를 알 수있는 방법을 제공하지 않는다. 이제 QCheckBoxQCheckBox로 작동하고 사용자는

for(int r=0;r<7;r++) 
{ 
    QListWidgetItem* lwi = new QListWidgetItem; 
    ui->listWidget->addItem(lwi); 
    ui->listWidget->setItemWidget(lwi, new QCheckBox(QString("checkBox%1").arg(r))); 
} 

단점 (QCheckBox에) 모든 곳을 클릭하여 확인란을 할 수있을 것입니다 : 당신이 항목의 많은 경우가 성능이 저하 될 수 있습니다.

+0

감사합니다. @ 체르노빌. 나는 과거에 아이템 위젯을 설정하는 것에 대해 알고 있었다고 생각한다. 나는 짧은 목록을 시도 할 것이다. 100 달러의 레이어 이름을 가질 수있는 건축 도면에 대해서는 잘 모르겠다. –

2

플래그 Qt::ItemIsUserCheckable을 설정 해제 한 상태로 유지하면 확인란을 클릭하면 항목의 확인 상태가 변경되지 않습니다. QListWidgetitemClicked 신호가 검사 상태를 토글하는 슬롯에 연결되면 검사 상태는 더 이상 두 번 토글되지 않습니다.

항목이 사용자가 확인할 수 있는지 여부에 관계없이 체크 상태가 설정되면 항목의 체크 박스가 표시됩니다.