Я настроил 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 );
}
}
}
У меня проблема и вопрос в том, что условие «если» всегда выполняется, даже если флажки сняты.
Задача ещё не решена.
Других решений пока нет …