Как я могу добавить каждый элемент из QListView в вектор? - PullRequest
0 голосов
/ 10 апреля 2020

просто хочу сказать, что я новичок в C ++. Я пытаюсь получить все элементы в моем QListView и вставить их в вектор.

Это моя функция loaddataset, которая загружает файлы из папки в QListView:

void MainWindow::on_actionLoad_Dataset_triggered()
{
    QString sPath = QFileDialog::getExistingDirectory(this, tr("Choose catalog"), ".", QFileDialog::ReadOnly);
    QStringList filter;
    filter << QLatin1String("*.png");
    filter << QLatin1String("*.jpeg");
    filter << QLatin1String("*.jpg");
    filter << QLatin1String("*.gif");
    filter << QLatin1String("*.raw");
    filemodel -> setNameFilters(filter);

    ui -> imgList -> setRootIndex(filemodel -> setRootPath(sPath)); 
}

This моя функция QList, которая затем берет файл, по которому пользователь щелкает, и загружает его в PixMap:

void MainWindow::on_imgList_clicked(const QModelIndex &index)
{
    imgNames = {};

    QString sPath = filemodel -> fileInfo(index).path();

    QString paths = filemodel -> fileInfo(index).fileName();

    //this kind of does it but instead of pushing them all it only pushes the ones that the user has clicked on instead of all
    imgNames.push_back(paths);

    map -> filename = filemodel -> filePath(index);

    map -> loadImage(scene);
    scene -> addItem(map);
}

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Если ваш вопрос заключается в том, как инициализировать QStringList, в C ++ 11 вы можете использовать список инициализаторов :

const auto filter = QStringList{
  QLatin1String("*.png"), 
  QLatin1String("*.jpeg"), 
  QLatin1String("*.jpg"),
  QLatin1String("*.gif"),
  QLatin1String("*.raw") };
filemodel -> setNameFilters( filter );

Если факт, вы можете отбросить явное экземпляр QStringList и сократить его до:

filemodel -> setNameFilters( {
  QLatin1String("*.png"), 
  QLatin1String("*.jpeg"), 
  QLatin1String("*.jpg"),
  QLatin1String("*.gif"),
  QLatin1String("*.raw") } );

Если вы заставляете переводить все строки / дружественные к Юникоду, кроме тех, которые явно отключены (обычный вариант использования для QLatin1String), Вы можете также рассмотреть определение собственной строки литеральный оператор , чтобы сделать ее более краткой:

inline QLatin1String operator""_QL1( const char* str, std::size_t len ) 
{ return QLatin1String( str, len ); }
...
filemodel -> setNameFilters( { "*.png"_QL1, "*.jpeg"_QL1, "*.jpg"_QL1, 
                               "*.gif"_QL1, "*.raw"_QL1 } );
0 голосов
/ 10 апреля 2020

Вы можете получить список всех элементов из QListView следующим образом:

    auto* m = qobject_cast<QStringListModel*>(ui->listView->model());
    const QStringList &list = m->stringList();
    QVector<QString> vec;
    std::vector<QString> vec2;
    for (const auto& l : list) {
        //using QVector
        vec.append(l);
        //or std::vector
        vec2.push_back(l);
        qDebug() << l;
    }

В качестве примечания вы можете инициализировать QStringList, используя список инициализаторов, например:

QStringList list = {"item1", "item2", "item3"};

, который будет быстрее и намного чище.

...