Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Помогите разобраться или переписать сторонинй софт. Исходники есть  (Прочитано 2357 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн fill.sa

  • Автор темы
  • Любитель
  • *
  • Сообщений: 94
    • Просмотр профиля
Добавлю
ПОдправил строку на

QString  url = QUrl::fromPercentEncoding("\"%1\"").arg(st);

В итоге выводится просто "2 , как-то вообще странно конвертируется.

Что я делаю нетак?
« Последнее редактирование: 22 Мая 2016, 20:14:51 от fill.sa »

Оффлайн spk-ubuntu

  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
судя по https://doc.qt.io/qt-4.8/qt-demos-embedded-flightinfo-flightinfo-cpp.html
правильным использованием будет что-то вроде
QString url = QUrl::fromPercentEncoding(st.toAscii());
Пользователь добавил сообщение 18 Мая 2016, 23:17:21:
P.S. Хотя в https://doc.qt.io/qt-4.8/qt-network-qftp-ftpwindow-cpp.html и https://doc.qt.io/qt-4.8/qt-network-qftp-example.html вместо toAscii() используется toLatin1(). Впрочем, судя по https://doc.qt.io/qt-4.8/qstring.html#toAscii toAscii() эквивалентен toLatin1(), если с помощью QTextCodec::setCodecForCStrings() не установлен какой-то другой кодер.
« Последнее редактирование: 18 Мая 2016, 23:17:21 от spk-ubuntu »

Оффлайн fill.sa

  • Автор темы
  • Любитель
  • *
  • Сообщений: 94
    • Просмотр профиля
Частично проблема решена.
Сделал по наводке так
QString  url = QUrl::fromPercentEncoding(st.toAscii());
Теперь текст без кракозябры. Но по прежнему на конечном выводе пусто. Запускается файл ""

Я так понимаю не работает вот эта часть и поэтому на выходе extracted равно ничего.            QString extracted;


            QRegExp regexp;
            int pos;
            regexp.setPattern("smb://.*/.*/.*/.*/.*");
            pos = regexp.indexIn(st);
               if (pos > -1)
               {
                 extracted = regexp.cap(0);
               }

Но тут я вообще ничего не могу понят как это работает.
Нашел мануал http://www.doc.crossplatform.ru/qt/4.6.x/qregexp.html Но ничего неясно.

Нужна помощь дальше )
« Последнее редактирование: 22 Мая 2016, 20:08:14 от fill.sa »

Оффлайн spk-ubuntu

  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
А что в переменной st на момент выполнения этого кода?

Оффлайн fill.sa

  • Автор темы
  • Любитель
  • *
  • Сообщений: 94
    • Просмотр профиля
spk-ubuntu,
Не очень силен в терминологии, но если я правильно понял, то я делал вот так выхводить в сообщение что в ST

trayIcon->showMessage(trUtf8("Домашний агент"), trUtf8("Исходный: \"%2\"\n\n Открытие файла:\n \"%1\"").arg(extracted).arg(st), ic, 8000);
В итоге все как выше писал, текст кракосябра или если делать
QString  url = QUrl::fromPercentEncoding(st.toAscii());
то текст читабельный, только наклонные слэши виндовые(в другую сторону наклон)

Я так понимаю вот эта часть кода должна трансформировать наклон с одной стороны в другую.
QString extracted;
     QRegExp regexp;
            int pos;
            regexp.setPattern("smb://.*/.*/.*/.*/.*");
            pos = regexp.indexIn(st);
               if (pos > -1)
               {
                 extracted = regexp.cap(0);
               }

Но на выходе вообще ничего. 
« Последнее редактирование: 25 Мая 2016, 11:06:46 от fill.sa »

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
fill.sa, для замены слешей не нужена регулярка. В случае с подойдёт QString::replace
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн spk-ubuntu

  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
Я так понимаю вот эта часть кода должна трансформировать наклон с одной стороны в другую.
Мне кажется, что эта часть просто проверяет соответствие строки регулярному выражению.
Т.е. что значение st имеет вид "smb://сервер/каталог1/каталог2/каталог3/имяфайла".
Я поэтому и спросил какое значение в st перед началом выполнения этого кода?

Пользователь добавил сообщение 26 Мая 2016, 01:03:06:
Собственно, этот код, наверное, пока вообще можно выкинуть и сразу выполнить
Цитировать
proc->start(QString("/usr/bin/vlc \"%1\"").arg(st));
« Последнее редактирование: 26 Мая 2016, 01:03:06 от spk-ubuntu »

Оффлайн fill.sa

  • Автор темы
  • Любитель
  • *
  • Сообщений: 94
    • Просмотр профиля
Воооот, спасибо ребята, толкнули прямо в нужную сторону.

Вообщем вопрос решен, вся проблема заключалась в кодировке. Видимо когда автор писал прогу, то в браузере адрес выглядил по человечески.
А моя проблема была в том, что я строку кодирования всунул не там и получается что текст выводится как положено. А вот коду трансформации пути попадала кракозябра и естественно ничего не трансформировалось, только smb прибавлялось.



Пользователь добавил сообщение 26 Мая 2016, 20:21:48:
Сейчас буду бумать над новой идеей, хочу сделать чтобы можно было выбирать с какого плеера делать запуск. Хотябы из конфига читать путь к плееру.

Сейчас все статично и запускается так

proc->start(QString("/usr/bin/smplayer \"%1\"").arg(extracted));

Пологаю можно сделать так

QString player;
proc->start(QString(""%2\" \"%1\"").arg(extracted).arg(player));

И если прокатит то потом как-то в player передать пусть в плееру.
« Последнее редактирование: 26 Мая 2016, 20:21:48 от fill.sa »

Оффлайн scsiman

  • Активист
  • *
  • Сообщений: 344
    • Просмотр профиля
fill.sa, по поводу настроек/конфига посмотрите в сторону QSettings. Дабы не изобретать N+1-й велосипед. ;-)
Dell Studio XPS 16, Ubuntu 16.04 LTS (Home).
HP nx6110, Ubuntu 8.04 LTS => 10.04 LTS (Home).

 

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