【问题标题】:how do i get a checkbox item from a QTableView and QStandardItemModel alone?我如何单独从 QTableView 和 QStandardItemModel 获取复选框项?
【发布时间】:2009-12-05 12:09:48
【问题描述】:

似乎使用 model.setData(index, Qt::Checked,Qt::CheckStateRole) 不足以使复选框正常工作。有什么建议吗?

【问题讨论】:

    标签: qt nokia qtableview


    【解决方案1】:

    我相信您需要继承 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);
    

    希望这会有所帮助,问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      相关资源
      最近更新 更多