2011-03-20 9 views

Odpowiedz

18

Dla pola wyboru przy użyciu metody pozycji setCheckState należy zrobić to, czego potrzeba zarówno dla widżetów listy i tabeli. Sprawdzić, czy kod poniżej będzie działać dla Ciebie: widget

Lista:

QListWidgetItem *item0 = new QListWidgetItem(tr("First"), listWidget); 
QListWidgetItem *item1 = new QListWidgetItem(tr("Second"), listWidget); 

item0->setCheckState(Qt::Unchecked); 
item1->setCheckState(Qt::Checked); 

widget Tabela:

QTableWidgetItem *item2 = new QTableWidgetItem("Item2"); 
item2->setCheckState(Qt::Checked); 
tableWidget->setItem(0, 0, item2); 

Można używać delegatów (QItemDelegate) dla innych typów widżetów edytora, przykład jest tutaj: Spin Box Delegate Example.

Spin Box Delegate

Mam nadzieję, że to pomaga.

+6

Wow. Zaskoczony, że ten komentarz został wybrany jako poprawna odpowiedź. Ponieważ ustawienie QListWidgetItem w stanie check nie jest całkiem 'dodawanie checkbox do Table lub List'. Ponadto tworzenie delegatów nie jest sposobem wstawiania tych widżetów do tabeli lub listy. Jest używany tylko do edycji komórek. –

+0

może być, ponieważ właśnie tego chciał OP. A ponieważ jego pytanie jest otwarte, ta odpowiedź jest jednym ze sposobów, w jaki może stworzyć \ skonfigurować swój widget. Poza tym w większości przypadków chcesz, aby kontrola była pokazywana podczas edytowania pola, które go nie ogląda. Dostarczenie widgetu do komórki za pomocą komendy setCellWidget nie powoduje, że ten widget jest częścią modelu, ale musisz ręcznie zadbać o zawartość i zdarzenia widgetu. –

+0

Czy możesz rozwinąć na swoim "Widget QList ** ** i QTable ** Widget **. Nie można uzyskać delegatów dla nich" komentarz? Oba widgety to potomkowie QAbstractItemView i nic nie stoi na przeszkodzie, aby ustawić dla nich delegatów przedmiotów. Przykład spinbox z mojego posta działa idealnie z QTableWidget –

41

Istnieją dwie metody:

void QTableWidget::setCellWidget (int row, int column, QWidget * widget) 

i

void QListWidget::setItemWidget (QListWidgetItem * item, QWidget * widget) 

Pozwalają one wstawić dowolny widget i inne kontrole, które dziedziczą QWidget. Pole wyboru/przycisk radiowy/combobox dziedziczy po QWidget.

+5

Zgadzam się, że to mylące, to nie zostało wybrane jako poprawna odpowiedź. Nie spędziłem dużo czasu na badaniu, ale pomyślałem, że ustawienie flagi, która może być zaznaczona na QTableWidgetItem, spowoduje pojawienie się pola wyboru - tak się nie stało. działa funkcja setCellWidget(). – Scott

+1

jak mogę przeczytać, czy jest zaznaczone czy nie? – Petr

+1

powinieneś sprawdzić za pomocą 'checkbox.checkState() == 0 lub == 2' jeden niezwycięziony i inny ckecked, i excampled z python, powinieneś przekonwertować. do -> – PersianGulf