QVector не добавляется! - PullRequest
1 голос
/ 05 мая 2011

У меня возникла проблема.

По какой-то причине, несмотря на то, что у меня есть значение в QString, выполнение append () для QVector не работает, и в итоге я все равно получаю толькопустой вектор.

    QList<QVariant> listServers = mapRepos.values ( "servers" ); // Finally, the last data structure, for holding server lists.
    // Populate the repository information with the server lists.

    for ( int i = 0; i < listServers.size(); ++i ) {
      for ( int j = 0; j < listServers.at ( i ).toList().size(); ++j ) {
        std::cout << "On file: " << listServers.at ( i ).toList().at ( j ).toString().toStdString() << std::endl;
        std::cout << "Type #: " << listServers.at ( i ).toList().at ( j ).type() << std::endl;
        buffer3 = listServers.at ( i ).toList().at ( j ).toString();
        std::cout << "In buffer: (" << buffer3.toStdString() << ")" << std::endl;
        arrayRepos.value ( j ).urls.append ( buffer3 );
        std::cout << "In memory: " << arrayRepos.value ( i ).urls.value ( i ).toStdString() << std::endl;
      }
    }
  }

Это соответствующий фрагмент в исходном файле.Первый cout возвращает URL, второй URL возвращает 10 (что в соответствии с документацией означает, что QVariant содержит строку, которая является правильной. Третий cout выводит строку правильно. Затем последний выводит строку без строки. Обратите внимание на наличиетам есть строка добавления. Весь мой здравый смысл программирования говорит мне, что вектор должен быть заполнен сейчас, но если взглянуть на его размер, то он равен 0, что означает, что QString не вставлен.

URL-адреса QVectorявляется частью struct:

struct repo {
QString name; // Имя репозитория.
QVector <QString> urls; // Адрес сервера или списка зеркал.
};

Имя QString является частью более раннего бита кода, который работает нормально и не имеет отношения к этой проблеме.

Я не могу придумать причину, почему append () или push_back () не сработает.

Ответы [ 2 ]

2 голосов
/ 05 мая 2011

Что такое тип arrayRepos, я думаю, это какой-то контейнер Qt (QVector, QList и т. Д.).В этом случае arrayRepos.value (j) возвращает копию структуры repo, когда вам нужна ссылка, поэтому вам нужно использовать либо operator[], либо at(j) функцию-член.

0 голосов
/ 05 мая 2011

Можете ли вы разбить этот код arrayRepos.value ( j ).urls.append ( buffer3 ); на отдельные утверждения, а затем попробовать.

Как:

QVector<QString> tmpurls = arrayRepos.value ( j ).urls;
tmpurls.append ( buffer3 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...