Название: Ошибки кроссплатформенности Отправлено: AlekseyK от Март 29, 2010, 21:47 Помогите разобраться пожалуйста: программа корректно работает в Windows (собрано mingw из Qt SDK), но в Линуксе часть функций не работает (дистрибутив openSUSE).
1) Следующий фрагмент прекрасно работает в Windows (QTextBrowser - textBrowser корректно отображает html страницу), а в Линуксе он пустой: Код: // Load help text 2) Phonon прекрасно функционирует и выводит звук в Windows: Код: // Setup sound player and output Название: Re: Ошибки кроссплатформенности Отправлено: BRE от Март 29, 2010, 22:07 1) Потому что не правильно формируется URL. Попробуй так:
Код
2) А что передается в sourceFile? Название: Re: Ошибки кроссплатформенности Отправлено: AlekseyK от Март 29, 2010, 22:17 1) Потому что не правильно формируется URL. Попробуй так: Код
Попробовал - тоже не работает. В чём ещё может быть проблема? Файл html был создан в ОО и имеет кодировку cp1251, но она там указана явно: <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1251"> - может в этом проблема почему в Windows работает, а в Линуксе - нет? 2) А что передается в sourceFile? Звук заработал, спасибо: в КДЕ были настройки на другую звуковую карту. Ещё добавилa.setApplicationName("LevitationBreath"); после QApplication a(argc, argv); чтобы убрать сообщение Цитировать WARNING: Phonon needs QCoreApplication::applicationName to be set to export audio output names through the DBUS interface Название: Re: Ошибки кроссплатформенности Отправлено: kibsoft от Март 29, 2010, 22:40 Код: ui->textBrowser->setSource("file:///" + helpUrl); Код: ui->textBrowser->setSource("file://" + helpUrl); На всякий случай: Код: // Load help text Кстати, сам только вчера с этим столкнулся :) тоже создал тему, но потом понял почему :) Название: Re: Ошибки кроссплатформенности Отправлено: AlekseyK от Март 29, 2010, 23:04 Я и так, и так уже пробовал перед тем как сюда писать: и с двумя слэшами, и с тремя - оба варианта не работают. Есть ещё идеи?
Название: Re: Ошибки кроссплатформенности Отправлено: Vass от Март 29, 2010, 23:18 Идеи в имени файла, оно у вас в разном регистре, вы точно по буквам проверили что, то, что написано в программе соответствует файлу на диске, в линуксе ФС регистрозависимая.
Название: Re: Ошибки кроссплатформенности Отправлено: AlekseyK от Март 29, 2010, 23:20 Идеи в имени файла, оно у вас в разном регистре, вы точно по буквам проверили что, то, что написано в программе соответствует файлу на диске, Выше код проверки, что файл физически присутствует на диске - отрабатывает.в линуксе ФС регистрозависимая. Эт, мы знаем: чай 11 лет в нём сидим ;)Название: Re: Ошибки кроссплатформенности Отправлено: AlekseyK от Март 29, 2010, 23:40 Добавил вывод url-a для проверки:
Код: ui->textBrowser->setSource(QUrl::fromLocalFile(helpUrl)); ; cat <url без file://> - выводит содержимое html файла корректно. Название: Re: Ошибки кроссплатформенности Отправлено: AlekseyK от Март 29, 2010, 23:50 Попробовал жёстко вбить исходный html в QTextBrowser в QtCreator - работает, будто setSource() вообще никак не влияет на результат. Может на событие show повесить загрузку?
Название: Re: Ошибки кроссплатформенности Отправлено: AlekseyK от Март 30, 2010, 20:47 Ппц.... в Линуксововй версии надо добавить:
ui->textBrowser->setSearchPaths(QStringList::QStringList("."));; чтобы заработало. Почему???!!! Название: Re: Ошибки кроссплатформенности Отправлено: crossly от Март 31, 2010, 12:09 а вот это тебе скажет документация по ОС... / в начале пути означает что поиск ведется с корневой директории... т.е. в данном случае нужно писать полный путь .... "точка" говорит о том что поиск ведется от текущего каталога...
Название: Re: Ошибки кроссплатформенности Отправлено: AlekseyK от Апрель 15, 2010, 15:21 а вот это тебе скажет документация по ОС... / в начале пути означает что поиск ведется с корневой директории... т.е. в данном случае нужно писать полный путь .... "точка" говорит о том что поиск ведется от текущего каталога... Какая хрен разница, если я указываю АБСОЛЮТНЫЙ путь?! Название: Re: Ошибки кроссплатформенности Отправлено: crossly от Апрель 15, 2010, 16:10 Код: helpUrl = qApp->applicationDirPath() + "/../LevitationBreathTechnic.htm"; Название: Re: Ошибки кроссплатформенности Отправлено: AlekseyK от Апрель 15, 2010, 16:50 Код: helpUrl = qApp->applicationDirPath() + "/../LevitationBreathTechnic.htm"; Код: helpUrl = qApp->applicationDirPath() + "/LevitationBreathTechnic.htm Название: Re: Ошибки кроссплатформенности Отправлено: crossly от Апрель 15, 2010, 17:21 какая версия Qt??
у меня на линухе прокатывает и Код: QUrl url("file://"+qApp->applicationDirPath()+"/test.sh"); Код: QUrl url("file:///"+qApp->applicationDirPath()+"/test.sh"); Название: Re: Ошибки кроссплатформенности Отправлено: AlekseyK от Апрель 15, 2010, 17:27 какая версия Qt?? у меня на линухе прокатывает и Код: QUrl url("file://"+qApp->applicationDirPath()+"/test.sh"); Код: QUrl url("file:///"+qApp->applicationDirPath()+"/test.sh"); 4.6.2. Тут видимо проблема не в url - он формируется корректно, а в QTextBrowser с его setSearchPaths() Название: Re: Ошибки кроссплатформенности Отправлено: crossly от Апрель 15, 2010, 17:41 я имею в виду что setSource и в том и в другом случае у меня нормально работает... Qt 4.5.3
Название: Re: Ошибки кроссплатформенности Отправлено: AlekseyK от Апрель 15, 2010, 17:45 я имею в виду что setSource и в том и в другом случае у меня нормально работает... Qt 4.5.3 В винде у меня - да, работает, в линуксе с setSearchPaths. Припоминаю, что и в ранних версиях Qt была такая ерунда в линуксе,- тоже надо было простой help вывести. Название: Re: Ошибки кроссплатформенности Отправлено: crossly от Апрель 15, 2010, 17:47 я же написал... у меня линукс
Название: Re: Ошибки кроссплатформенности Отправлено: AlekseyK от Апрель 15, 2010, 18:04 Запишем в несчастные случаи ;)
Название: Re: Ошибки кроссплатформенности Отправлено: AlekseyK от Апрель 15, 2010, 18:05 я же написал... у меня линукс А кстати не проверял какой у тебя searchPaths() по умолчанию? Может это где в настройках Qt, поэтому и результат разный. Название: Re: Ошибки кроссплатформенности Отправлено: crossly от Апрель 15, 2010, 19:14 совершенно пустой....
Название: Re: Ошибки кроссплатформенности Отправлено: Prm от Апрель 16, 2010, 08:55 А если попробовать
if (QFileInfo(qApp->applicationDirPath() + "/LevitationBreathTechnic.htm").exists()) helpUrl = "\"" + qApp->applicationDirPath() + "/LevitationBreathTechnic.htm" + "\""; Т.е. наличие файла проверять без использования двойных кавычек, а там, где файл используется непосредственно, путь к нему обрамлять двойными кавычками. Должно помочь. Название: Re: Ошибки кроссплатформенности Отправлено: crossly от Апрель 16, 2010, 12:30 и в чем сокральный смысл кавычек??
Название: Re: Ошибки кроссплатформенности Отправлено: Prm от Апрель 16, 2010, 13:46 и в чем сокральный смысл кавычек?? Наличие пробелов или русских символов в пути к файлу. Оговорюсь сразу - ПОД ЛИНУКСОМ НЕ ПРОБОВАЛ. Совет, как говорится, до кучи. Простой пример. Необходимо из программы запустить другую программу. Каталог программы C:\Program files\ Папка русскими буквами с пробалами\bin, Запускаемый файл: prog.exe QProcess exc; Первый вариант: QString prog = QApplication::applicationDirPath() + "/prog.exe"; ... exc.start(prog); ... Программа не запускается Второй вариант: QString prog = "\"" + QApplication::applicationDirPath() + "/prog.exe" + "\""; ... exc.start(prog); ... Программа УСПЕШНО запущена. Название: Re: Ошибки кроссплатформенности Отправлено: AlekseyK от Апрель 17, 2010, 00:43 Вариант имеет право на существование, но костыль, хотя и лучше найденного мной в некоторых случаях.
|