2011-03-20 21 views

risposta

18

Per una casella di controllo che utilizza il metodo setCheckState dell'articolo deve fare ciò che è necessario sia per i widget di elenco che di tabella. Vedere se il codice di seguito dovrebbe funzionare per voi: widget di

listino:

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

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

widget di Tabella:

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

È possibile utilizzare delegati (QItemDelegate) per altri tipi di widget del redattore, esempio è qui: Spin Box Delegate Example.

Spin Box Delegate

Spero che questo aiuta.

+6

Wow. Sorpreso che questo commento è stato selezionato come risposta corretta. Poiché l'impostazione di QListWidgetItem nello stato di controllo non equivale a "aggiungere la casella di controllo a Tabella o a Elenco". Inoltre, la creazione di delegati non è il modo di inserire tali widget in Tabella o Elenco. È usato solo per modificare le celle. –

+0

potrebbe essere perché è ciò che l'OP voleva. E poiché la sua domanda è aperta, questa risposta è uno dei modi in cui può creare \ impostare il suo widget. Inoltre nella maggior parte dei casi si desidera che venga mostrato un controllo quando si modifica il campo non visualizzandolo. Fornire un widget alla cella tramite setCellWidget non rende questo widget parte del modello, dovresti comunque occuparti manualmente del contenuto e degli eventi del widget. –

+0

Puoi approfondire il tuo "QList ** Widget ** e QTable ** Widget **? Impossibile delegare i delegati per loro" commenta? Entrambi i widget sono discendenti di QAbstractItemView e nulla ti impedisce di impostare delegati degli elementi per loro. L'esempio dello spinbox dal mio post funziona perfettamente con QTableWidget –

41

ci sono due metodi:

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

e

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

Esse permettono di inserire qualsiasi widget e altri controlli che ereditano QWidget. La casella di controllo/il pulsante di opzione/la casella combinata ereditano da QWidget.

+5

Accetto che sia confuso questo non è stato selezionato come risposta corretta. Non ho passato molto tempo a investigare, ma pensavo che impostare il flag controllabile su un QTableWidgetItem facesse apparire una casella di controllo, ma non è così. setCellWidget() ha funzionato, però. – Scott

+1

come posso leggere se è selezionato o no? – Petr

+1

dovresti controllare con 'checkbox.checkState() == 0 o == 2' uno unckecked e un altro ckecked, ho criptato con python, dovresti convertire. a -> – PersianGulf

Problemi correlati