比较表项的检查状态

时间:2013-10-30 09:31:27

标签: c++ qt qtableview qstandarditemmodel

我已经设置了一个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'条件。

0 个答案:

没有答案