2010-03-07 3 views
22

Sono appena iniziato con la programmazione Qt e sto cercando di creare un semplice layout di dati tabulare utilizzando un controllo QTableView con una classe modello di mia creazione ereditata da QAbstractTableModel. Per qualche ragione, la mia vista tabella finisce per assomigliare a questo:QTableView ha caselle di controllo indesiderate in ogni cella

alt text http://users.nerdland.net/tyler/files/pics/qtableview_checkboxes.png

cosa nel diavolo sono quelle cose che sembrano le caselle di controllo (ma non fanno nulla quando si fa clic loro) in ogni cellula, e come faccio a farli andare via? Non ho modificato nessuna delle proprietà QTableView ad eccezione del nome dell'oggetto.

Se è importante, il mio codice del modello è morto semplice:

MyTableModel::MyTableModel(QObject* parent) 
    : QAbstractTableModel(parent) 
{ 
} 

MyTableModel::~MyTableModel() 
{ 
} 

int MyTableModel::rowCount(const QModelIndex& parent) const 
{ 
    return 1000; 
} 

int MyTableModel::columnCount(const QModelIndex& parent) const 
{ 
    return 5; 
} 

QVariant MyTableModel::data(const QModelIndex& index, int role) const 
{ 
    return "Foo"; 
} 

la finestra di interfaccia utente è costruito in Qt Designer, e all'interno della classe per la finestra di Allego il modello per la vista in questo modo:

MyTableModel testModel = new MyTableModel(this); 
ui.testTable->setModel(testModel); 

Diverso da quello che non eseguo operazioni su ui.testTable.

Utilizzo di Qt 4.6.

risposta

47

Provare a cambiare MyTableModel::data() al seguente:

QVariant MyTableModel::data(const QModelIndex& index, int role) const 
{ 
    if (role == Qt::DisplayRole) 
     return "foo"; 
    else 
     return QVariant(); 
}

Probabilmente il restituita QVariant per il ruolo Qt::CheckStateRole stato frainteso dal QTableView.

+0

Perfetto! Grazie. Suppongo che non dovrei semplicemente ignorare i parametri che non ho ancora imparato ... –

+3

Felice di aiutarti :) Qt semplicemente rocce! – Elrohir

+2

Anche tu mi hai aiutato! –

2

Ti capita per caso di impostare la flag Qt::ItemIsUserCheckable in flags()?

+1

No, e anche se sovrascrivo 'flags' per restituire' QAbstractTableModel :: flags (index) & ~ Qt :: ItemIsUserCheckable; ', le caselle di controllo rimangono. –