Come faccio ad avere un elemento di casella di controllo da un QTableView e QStandardItemModel solo?
-
13-09-2019 - |
Domanda
Sembra utilizzando model.setData (indice, Qt :: quadri, Qt :: CheckStateRole) non è sufficiente per ottenere la casella di controllo a lavorare subito. Qualche suggerimento?
Soluzione
Credo che si avrebbe bisogno di sottoclasse QStandardItemModel; sovrascrivere il metodo bandiere e tornare Qt :: ItemIsUserCheckable insieme ad altre bandiere per la colonna con le caselle di controllo. Di seguito è riportato un esempio:
class TableModel : public QStandardItemModel
{
public:
TableModel();
virtual Qt::ItemFlags flags ( const QModelIndex & index ) const;
};
TableModel::TableModel()
{
//???
}
Qt::ItemFlags TableModel::flags ( const QModelIndex & index ) const
{
Qt::ItemFlags result = QStandardItemModel::flags(index);
if (index.column()==1) result |= Qt::ItemIsUserCheckable;
return result;
}
ecco come mi è stato in fase di inizializzazione dei controlli:
QStandardItemModel* tableModel = new TableModel();
// add columns
tableModel->insertColumn(0, QModelIndex());
tableModel->insertColumn(1, QModelIndex());
// add rows
tableModel->insertRows(0, 1, QModelIndex());
tableModel->insertRows(1, 1, QModelIndex());
// set text item
QModelIndex index0 = tableModel->index(0, 0, QModelIndex());
tableModel->setData(index0, QVariant("test item"), Qt::EditRole);
// set checkbox item
QModelIndex index1 = tableModel->index(0, 1, QModelIndex());
tableModel->setData(index1, QVariant(Qt::Checked), Qt::CheckStateRole);
ui->tableView->setModel(tableModel);
Spero che questo aiuti, saluti
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow