QListWidget은 을 사용하여 클릭 한 항목 경계 사각형을 결정하고 선택 상자가있는 경우에도 선택합니다. 이 메서드는 가상 메서드가 아니기 때문에 더러운 트릭 (체크 상자를 전환 할 때마다 선택 항목을 변경하는 등)없이 해당 동작을 변경할 수 없습니다. QListWidget과 마찬가지로 자신 만의 QListView 및 QAbstractItemModel을 파생시켜야합니다. 걱정하지 마십시오. others은 부적절한 체크/선택 동작을 발견했습니다. 어떤 방향으로 알려 드리겠습니다.
두 개의 열이있는 고유 한 QAbstractItemModel을 파생시켜야합니다. 첫 번째 열은 확인란 열이며 확인란 항목을 그리는 열 위임자를 지정해야하며 두 번째 열은 표시 텍스트 열입니다 (아래에서 다루지 않음). 그런 다음 YourListView 클래스 : 나는 Qt의 모델 - 뷰 - 대리인 아키텍처는 다소 무서운 알고
void YourListView::clickedSlot(const QModelIndex &index)
{
if(index.isValid())
{
// Checkbox toggle
if(index.column() == 0)
{
QVariant beforeValue = this->model()->data(index);
this->model()->setData(index, QVariant::fromValue(! beforeValue.toBool()));
}
else
if(index.column() == 1)
{
this->selectionModel()->select(index, QItemSelectionModel::Toggle);
}
}
}
을
connect(this, SIGNAL(clicked(const QModelIndex & )), this, SLOT(clickedSlot(const QModelIndex & )));
을 선포/사용
자신의 슬롯으로 클릭 신호를 연결합니다 훈련받지 않은 프로그래머 였지만 그 재미를 한 번 이해했다. 아, 개인적으로 손으로 짠 QGraphicsView 솔루션을 사용하지 않으려합니다. 자체 트랩 및 모서리가있어 허용되는 모양으로 전환하는 데 더 많은 시간을 들여야합니다.
행운을 빌어 요!
별도의 열을 사용한다고 생각했지만 사용법을 완전히 결정할 수는 없었습니다. 이제 나는 정해야 할 방향이 있습니다. 도와 주셔서 정말로 고맙습니다! – Rikonator