我已经设置了一个QStandardItemModel,并使用来自查询数据库的另一个模型的数据填充它。该模型用于表格视图,我向用户显示信息。第一列是“复选框”字段,用户可以选中或取消选中该字段。下面是我用来设置'display'模型的代码(我添加了注释以显示复选框的添加位置)
for ( int row = 0; row < m_infoModel->rowCount(); ++row )
{
QStandardItem *item;
item = new QStandardItem;
// Sets up checkbox here
item->setData( QVariant ( Qt::Unchecked ), Qt::CheckStateRole );
Qt::ItemFlags flags = ( Qt::ItemIsUserCheckable | Qt::ItemIsEnabled );
item->setFlags( flags );
m_displayModel->setItem( row, 0, item );
// Checkbox setup complete...
// ... More data added here
item = new QStandardItem;
item->setText( m_infoModel->data( m_infoModel->index( row, 0 ) ).toString() );
m_displayModel->setItem( row, 1, item );
item = new QStandardItem;
item->setText( m_infoModel->data( m_infoModel->index( row, 1 ) ).toString() );
m_displayModel->setItem( row, 2, item );
item = new QStandardItem;
item->setText( m_infoModel->data( m_infoModel->index( row, 2 ) ).toString() );
m_displayModel->setItem( row, 3, item );
}
在用户交互之后,我遍历表中的每一行,以检查哪些行已被检查,以便我可以使用相应的信息。
if ( m_infoModel->rowCount() != 0 )
{
QStringList stringListOfVars;
for ( int i = 0; i < m_displayModel->rowCount(); ++i )
{
if ( m_displayModel->item( i, 0 )->checkState() == Qt::Checked )
{
QString var = m_displayModel->data( m_displayModel->index( i, 2 ) ).toString();
stringListOfVars.prepend( var );
}
}
}
我遇到的问题和疑问是,即使没有选中复选框,也始终会满足'if'条件。