PDA

View Full Version : QSqlQueryModel ‘s method rowcount() return 256



liuqin820222
10th May 2013, 06:32
there are 1000 record in my database table,but when i use querymodel binding the tableview, there are 1000 records displaying in the tableview,but the querymodel.rowcount() return 256,why?thanks! the code as follows:


QSqlQueryModel *model= new QSqlQueryModel;

QSqlQuery query;
QString querystr = "select * from mytable";


query.exec();

model->setQuery(query);
model->setHeaderData(1, Qt::Horizontal, tr("name"));
model->setHeaderData(2, Qt::Horizontal, tr("age"));

ui->tableViewZDCommTask->setModel(model);
ui->tableViewZDCommTask->setSelectionMode(QAbstractItemView::MultiSelection );
ui->tableViewZDCommTask->setSelectionBehavior(QAbstractItemView::SelectRows );
ui->tableViewZDCommTask->setColumnHidden(0,true);
ui->tableViewZDCommTask->resizeColumnsToContents();
ui->tableViewZDCommTask->setEditTriggers(QAbstractItemView::NoEditTriggers) ;

QHeaderView *header = ui->tableViewZDCommTask->horizontalHeader();
header->setStretchLastSection(true);
ui->tableViewZDCommTask->show();

QMessageBox::about(0,"",QString::number(model->rowCount()));//return 256 [/INDENT]

Lesiok
10th May 2013, 08:12
Did You read how this method work ? Doc says : If the database supports returning the size of a query (see QSqlDriver::hasFeature()), the number of rows of the current query is returned. Otherwise, returns the number of rows currently cached on the client..
As you can see the result is dependent on what can your database.

ChrisW67
10th May 2013, 09:16
QSqlQueryModel, on which QTableModel is built, is hard coded to prefetch 255 rows at a time. Look at the canFetchMore() and fetchMore() methods.