• Как получить файлы из папок и подпапок?

    vxblog
    @vxblog
    QList <QString> files;
    
    void SearchFiles::scanDir (const QDir &dir){
        if(!dir.exists()){
            isFind = false;
            return;
        }
    
        QDirIterator it (dir.path (), QDir::Files, QDirIterator::Subdirectories);
        while (it.hasNext()) {
            it.next();
            files << it.fileInfo ().absoluteFilePath();
        }
    }
  • Почему поле lineEdit не реагирует на enter?

    vxblog
    @vxblog
    Как я понял, код должен быть кросс-платформенным? В этом случае для объявления строковых констант гораздо удобнее использовать макросы, например Q_OS_WIN и Q_OS_LINUX.

    На мой взгляд, вы неправильно пытаетесь запустить параллельный процесс. Ваша логика совершенно верна - под Windows нам необходимо запустить cmd и передать ему набор параметров, разделённых пробелами. Возможны два варианта реализации (для Qt 5).
    • Установить запускаемую программу (QProcess::setProgram) и аргументы (QProcess::setArguments), затем вызвать QProcess::start без параметров.

    • Вызвать QProcess::start с указанием программы и аргументов. Обращаю ваше внимание, что в этом случае метод принимает не один (как у вас), а два обязательных параметра - имя программы и контейнер аргументов.

    В обоих случаях речь идёт о предварительном формировании контейнера аргументов. Например, с помощью метода QString::split.

    void SecondWindow::command()
    {
      // Под Windows вызывается cmd,
      // для всего остального - sh
    
      QString c;
    
    #ifdef Q_OS_WIN
      c = QLatin1String ("cmd");
    #else
      c = QLatin1String ("sh");
    #endif
    
      // Формирование контейнера аргументов
      // и вызов программы
      QStringList args = ui->lineEdit_4->text ().split (QLatin1String (" "));
      m_process->start (c, args);
    }