Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Portuguese
  4. Problema com o 'for'

Problema com o 'for'

Scheduled Pinned Locked Moved Portuguese
6 Posts 2 Posters 1.9k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Offline
    T Offline
    Ticianelli
    wrote on last edited by
    #1

    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);

            }
        }
    
    1 Reply Last reply
    0
    • T Offline
      T Offline
      TioRoy
      wrote on last edited by
      #2

      Mas ele faz chamada de qual método uma vez só? downloadReport ou downloadAllReportsLoading?
      Se você está num loop, o rowCount() é maior que 1? Se sim, algo realmente está estranho, pois no código do seu post existem 2 caminhos (if/else).

      T 1 Reply Last reply
      0
      • T TioRoy

        Mas ele faz chamada de qual método uma vez só? downloadReport ou downloadAllReportsLoading?
        Se você está num loop, o rowCount() é maior que 1? Se sim, algo realmente está estranho, pois no código do seu post existem 2 caminhos (if/else).

        T Offline
        T Offline
        Ticianelli
        wrote on last edited by
        #3

        @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

        T 1 Reply Last reply
        0
        • T Ticianelli

          @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

          T Offline
          T Offline
          TioRoy
          wrote on last edited by TioRoy
          #4

          @Ticianelli

          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?

          T 1 Reply Last reply
          0
          • T TioRoy

            @Ticianelli

            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?

            T Offline
            T Offline
            Ticianelli
            wrote on last edited by
            #5

            @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.

            T 1 Reply Last reply
            0
            • T Ticianelli

              @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.

              T Offline
              T Offline
              TioRoy
              wrote on last edited by
              #6

              @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")));
              }
              
              1 Reply Last reply
              0

              • Login

              • Login or register to search.
              • First post
                Last post
              0
              • Categories
              • Recent
              • Tags
              • Popular
              • Users
              • Groups
              • Search
              • Get Qt Extensions
              • Unsolved