どのように私は一人でQTableViewとQStandardItemModelからチェックボックス項目を得るのですか?

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

  •  13-09-2019
  •  | 
  •  

質問

model.setData(インデックス、Qtの::チェック、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