Russian Qt Forum
Ноябрь 26, 2024, 02:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не получается выделить имя файла из полного имени  (Прочитано 5515 раз)
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]; никакого результата не даёт.
« Последнее редактирование: Сентябрь 02, 2014, 10:16 от Alexu007 » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Сентябрь 02, 2014, 10:15 »

А в получаемом имени не такие разделители? "\"
Записан
Alexu007
Гость
« Ответ #2 : Сентябрь 02, 2014, 10:26 »

Во блинн!!! Конечно такие. Но в первом примере с QFileDialog::getOpenFileName они "/", я только что ещё раз проверил. Это шо за первоапрельские шутки?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Сентябрь 02, 2014, 10:28 »

Во блинн!!! Конечно такие. Но в первом примере с QFileDialog::getOpenFileName они "/", я только что ещё раз проверил. Это шо за первоапрельские шутки?
Венда же.
Или конвертируйте слеши сами, а лучше воспользуйтесь для этого классом QFileInfo.
Записан
Bepec
Гость
« Ответ #4 : Сентябрь 02, 2014, 11:35 »

QString QDir::fromNativeSeparators(const QString & pathName)
может помочь вам в этой путанице. Всегда возвращает путь с /.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #5 : Сентябрь 02, 2014, 12:09 »

а не бага ли это? в кутях вообще в АПИ принято юзать / и то, что openFileNames возвращает \ - очень странно
Записан
Bepec
Гость
« Ответ #6 : Сентябрь 02, 2014, 12:26 »

Там используется нативный диалог, который возвращает нативный путь.
Записан
Alexu007
Гость
« Ответ #7 : Сентябрь 03, 2014, 17:39 »

А как сделать, чтобы в диалоге выбора файла разные расширения файла предлагались, по умолчанию мр3, затем wav и *.* ?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #8 : Сентябрь 03, 2014, 17:51 »

почитать документацию к getOpenFileNames
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.158 секунд. Запросов: 23.