Problema com o 'for'
-
Bom dia, Estou desenvolvendo uma aplicação e estou com o seguinte problema.
Fiz um for para verificar dado a dado de uma tableview, nesta verificação ele faz uma consulta para ver se o dado que está sendo verificado existe em um banco de dados local, após essa verificação o programa pode seguir por dois caminhos(caso o dado exista ou não).
Nestes em cada um destes caminhos eu tenho a chamado de um método tipo void.Este é um resumo do meu programa, o problema é que ele só faz a chamado do método quando chega no ultimo índice da tableview, independente de quantos dados eu tenha guardados nela, ele só chama o método no ultimo deles.
Não sei se estou usando o 'for' de maneira errada, preciso de uma orientação.Resumo da implementação:
for(i = 0; i < ui->tbvwAnswered->model()->rowCount(); i++)
{
exam.setNumExam(ui->tbvwAnswered->model()->data(ui->tbvwAnswered->model()->index(i, 2)).toInt());
.
.
.
if(db->checkExamExists(QString(exam.getNumExam()).toInt()))
{
wload->downloadReport(exam);
}
else
{
wload->downloadAllReportsLoading(ui->tbvwAnswered->model()->data(ui->tbvwAnswered->model()->index(i, 0)).toInt(), t);} }
-
@TioRoy
Ele verifica se o dado do rowcount existe no banco de dados local e se existir chama o downloadReport, se não existir chama o downloadAllReportsLoading.
A idéia era percorrer cada dado do rowcount e dar um caminha para cada um deles, ou if/ else.
Quando o rowcount tem apenas 1 dado ele funciona normalmente, quando tem mais de um ele só da um caminho para o ultimo dado.O exemplo de implementação que eu coloquei está só parte do código, uma versão simplificada para ajudar na visualização
-
Você diz que quando o rowCount é > 1 o loop só roda 1 vez?
Que tipo é o seu model()?
O que acontece se você escrever um código assim, só para testar:
for(i = 0; i < ui->tbvwAnswered->model()->rowCount(); i++) { qDebug() << i; }
Ele funciona corretamente?
-
@TioRoy
Quando eu mencionei "Quando o rowcount tem apenas 1 dado ele funciona normalmente, quando tem mais de um ele só da um caminho para o ultimo dado.", eu me referia ao problema em questão, este é o problema, ele percorre os dados do rowcount, mas ele não chama os métodos para cada dado percorrido.
Coloquei prints em todas as linhas quase, e o caminho que o software está fazendo é o seguinte: Entra no for do rowcount pelo indice 0; Puxa os dados do rowcount; Verifica se o exame existe; Entra no if/else de acordo com se ele existe ou não (até aqui funciona certo), mas quando ele entra no if/else ele não faz a chamada do método que está dentro dele. -
@Ticianelli
Nem no IF e nem no ELSE? Tá muito estranho isso.downloadReport e downloadAllReportsLoading são funções que fazem algum trabalho assíncrono? Pelo nome devem fazer download, e se você usa algo +- como no código abaixo, o seu problema pode estar nestas funções, já que são assíncronas.
Sem olhar mais código fica um pouco difícil ajudar.
void test() { QNetworkAccessManager *manager = new QNetworkAccessManager(this); connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); manager->get(QNetworkRequest(QUrl("http://qt-project.org"))); }