Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Alexu007 от Сентябрь 02, 2014, 10:13



Название: Не получается выделить имя файла из полного имени
Отправлено: Alexu007 от Сентябрь 02, 2014, 10:13
Код
C++ (Qt)
   QMessageBox msgBox;
   //QStringList files;
 
   //диалог выбора файлов
   Qstring str = QFileDialog::getOpenFileName(this, tr("Open File"),
                                                   "C:/temp/", tr("*.mp3"));
 
   if(str == "") return;
 
   msgBox.setText(str);
   msgBox.exec();
 
   // выделение имени файла из полного
   QString inp_fname = str.section('/', -1);
 
   msgBox.setText(inp_fname);
   msgBox.exec();
 
   // путь без имени файла
   QString out_patch = str.remove(inp_fname);
 
   msgBox.setText(out_patch);
   msgBox.exec();

Вот так всё работает, сперва выводит полный путь к файлу с именем файла, затем только имя файла, и затем путь без имени - то, что требуется. Но отказывается работать, если применить диалог множественного выбора файлов и QStringList:

Код
C++ (Qt)
   QMessageBox msgBox;
   QStringList files;
 
   //диалог выбора файлов
   files = QFileDialog::getOpenFileNames(this, tr("Open File"),
                                                   "C:/temp/", tr("*.mp3"));
 
   QStringList::Iterator it = files.begin();
 
 
   // количество выбранных файлов
   int cx = files.size();
 
 
   // полный путь к входному файлу
   QString str = *it;
 
   //Qstring str = files[0];
 
   if(str == "") return;
 
   msgBox.setText(str);
   msgBox.exec();
 
   // выделение имени файла из полного
   QString inp_fname = str.section('/', -1);
 
   msgBox.setText(inp_fname);
   msgBox.exec();
 
   // путь без имени файла
   QString out_patch = str.remove(inp_fname);
 
   msgBox.setText(out_patch);
   msgBox.exec();

При этом в первом msgBox показывается правильный полный путь к файлу, во втором - тот же полный путь к файлу без изменений, а ожидается только имя файла. Ну и в третьем, ессно, пустая строка. Почему не хочет работать str.section('/', -1);? Замена QString str = *it; на QString str = files[0]; никакого результата не даёт.


Название: Re: Не получается выделить имя файла из полного имени
Отправлено: Old от Сентябрь 02, 2014, 10:15
А в получаемом имени не такие разделители? "\"


Название: Re: Не получается выделить имя файла из полного имени
Отправлено: Alexu007 от Сентябрь 02, 2014, 10:26
Во блинн!!! Конечно такие. Но в первом примере с QFileDialog::getOpenFileName они "/", я только что ещё раз проверил. Это шо за первоапрельские шутки?


Название: Re: Не получается выделить имя файла из полного имени
Отправлено: Old от Сентябрь 02, 2014, 10:28
Во блинн!!! Конечно такие. Но в первом примере с QFileDialog::getOpenFileName они "/", я только что ещё раз проверил. Это шо за первоапрельские шутки?
Венда же.
Или конвертируйте слеши сами, а лучше воспользуйтесь для этого классом QFileInfo.


Название: Re: Не получается выделить имя файла из полного имени
Отправлено: Bepec от Сентябрь 02, 2014, 11:35
QString QDir::fromNativeSeparators(const QString & pathName)
может помочь вам в этой путанице. Всегда возвращает путь с /.


Название: Re: Не получается выделить имя файла из полного имени
Отправлено: Авварон от Сентябрь 02, 2014, 12:09
а не бага ли это? в кутях вообще в АПИ принято юзать / и то, что openFileNames возвращает \ - очень странно


Название: Re: Не получается выделить имя файла из полного имени
Отправлено: Bepec от Сентябрь 02, 2014, 12:26
Там используется нативный диалог, который возвращает нативный путь.


Название: Re: Не получается выделить имя файла из полного имени
Отправлено: Alexu007 от Сентябрь 03, 2014, 17:39
А как сделать, чтобы в диалоге выбора файла разные расширения файла предлагались, по умолчанию мр3, затем wav и *.* ?


Название: Re: Не получается выделить имя файла из полного имени
Отправлено: kambala от Сентябрь 03, 2014, 17:51
почитать документацию к getOpenFileNames