无法将项目添加到QTableWidget

时间:2013-07-09 14:57:41

标签: c++ qt qt5 qtablewidget qtablewidgetitem

我有一个查询SQLite数据库的程序,并在表中显示该数据库中的一些信息。我已经在程序中做了几次这样做,并整理出一种更模糊的方法,所以我写了一个新的函数,但它总是抛出一个断言:

ASSERT failure in QList<T>::operator[]: "index out of range", file /usr/include/qt/QtCore/qlist.h, line 462

这是我的代码:

void Sync::on_btnLoadTable_clicked()
{
if ( !m_district ) return;

ui->tblTableView->clear();
ui->tblTableView->setRowCount( 0 );
ui->tblTableView->setColumnCount( 0 );

ui->tblTableView->setSortingEnabled( false );

QStringList fields;
QList< QStringList > rows = m_district->getAllOf( ui->cboTables->currentText(), &fields );

int rowCount = rows.size();
if ( rowCount > 0 )
{
    int columns = fields.size();
    ui->tblTableView->setColumnCount( columns );
    for(int c=0; c < columns; c++)
        ui->tblTableView->setHorizontalHeaderItem( c, new QTableWidgetItem(fields[c]) );

    ui->tblTableView->setRowCount( rowCount );
    for(int r=0; r < rowCount; r++)
    {
        int cols = rows[r].size();
        qDebug() << "Fields=" << columns << ", row columns=" << cols;
        qDebug() << "Table is " << ui->tblTableView->columnCount() << "x" << ui->tblTableView->rowCount();
        for(int c=0; c < columns; c++)
        {
            qDebug() << "row column count=" << rows[r].size();
            qDebug() << "row=" << r << ",col=" << c;
            QString data = rows[r][c];
            qDebug() << "text=" << data;
            QTableWidgetItem *item = new QTableWidgetItem( data );
            ui->tblTableView->setItem( r, c, item );
            qDebug() << "inserted [" << r << "," << c << "]";
        }
    }
    qDebug() << "Finished";
}
ui->tblTableView->setSortingEnabled( true );

}

它在qDebug输出以下内容:

Fields= 10 , row columns= 10 
Table is  10 x 6381
row column count= 10 
row= 0 ,col= 0 
text= "137288735238a076b1ed644781a8cdf3f598067b41" 
ASSERT failure in QList<T>::operator[]: "index out of range", file /usr/include/qt/QtCore/qlist.h, line 462

我设置了一系列断点,它似乎在ui->tblTableView->setItem( r, c, item );行中断,但列数和行数似乎暗示行r和列c是两个有效的放置物品的地方。

为什么它会给我这个断言的任何想法?

0 个答案:

没有答案