QStandardItemModel をセットアップし、データベースにクエリを実行する別のモデルからのデータを入力しました。モデルは、ユーザーに情報を表示するテーブル ビューで使用されます。最初の列は、ユーザーがオンまたはオフにできる「チェック ボックス」フィールドです。以下は、「表示」モデルをセットアップするために使用したコードです(チェックボックスが追加された場所を示すためにコメントを追加しました)
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」条件が常に満たされることです。