QtableView 및 QStandardItemModel에서만 확인란 항목을 얻으려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/1850124

  •  13-09-2019
  •  | 
  •  

문제

Model.setData (index, qt :: checked, qt :: CheckStaterole)를 사용하는 것 같습니다. 확인란을 올바르게 작동시키기에 충분하지 않습니다. 제안이 있습니까?

도움이 되었습니까?

해결책

나는 당신이 QstandardItemModel을 서브 클래스해야한다고 생각합니다. 플래그 메소드를 무시하고 qt :: itemisuserCheckable과 함께 확인란이있는 열의 다른 플래그와 함께 반환하십시오. 아래는 예입니다.

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;
}

제가 컨트롤을 초기화하는 방법은 다음과 같습니다.

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);

이것이 도움이되기를 바랍니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top