Название: Начало работы с Qt Отправлено: Day от Январь 13, 2012, 10:34 приобрел книжицу Макс Шлее Qt4.5+дистрибутив с примерами.
Начал примерчики делать. Поздоровался. Сделал 2 виджетика "сигнал-слот" Все путем. Перешел к части 5. Код: #include <QtGui> stone.jpg в папке присутствует. В чем дело? Там еще был pwgt1 - голубой квадрат (я его выкинул из кода) - вот он появлялся. Почему принимаются картинки только в стиле Малевича? :) В той же главе 5 еще 2 проекта - MouseCursor, ScrollArea использующие картинки. Тоже картинок нет. Компутер - Настольный PC, Windows XP Название: Re: Начало работы с Qt Отправлено: Bepec от Январь 13, 2012, 10:44 Может у тебя просто палитра удаляется при выходе из процедуры? :D
Создай её тоже динамически, как и виджет, аля Код: QPalette* pal2 = new QPalette(); И посмотри что получится. :) ждусь результатов. Название: Re: Начало работы с Qt Отправлено: andrew.k от Январь 13, 2012, 11:48 в какой папке у тебя присутствует stone.jpg? Там где исходники?
Обрати внимание откуда запускается твоя программа. Название: Re: Начало работы с Qt Отправлено: stima от Январь 13, 2012, 11:49 Создание обьекта динамически или статически тут роли совершенно не играет.
Код: #include <QtGui/QApplication> И вывод в студию. Название: Re: Начало работы с Qt Отправлено: Bepec от Январь 13, 2012, 12:13 Приведенный пример полностью рабочий :)
Сделай проще - картинку скопируй в корень диска "С:\" допустим. И путь к ней укажи полный "С:\stone.jpg". Название: Re: Начало работы с Qt Отправлено: andrew.k от Январь 13, 2012, 12:26 Ошибку свою понял, заметив main ;) А сначала в приведенном коде ты не заметил main? ;D... но main тут тоже не при чем. "А мужики-то не знали" ) Название: Re: Начало работы с Qt Отправлено: Пантер от Январь 13, 2012, 12:41 Пиплы.... Дружно рубим свой офтоп.
Название: Re: Начало работы с Qt Отправлено: andrew.k от Январь 13, 2012, 12:44 Да. Видимо у меня аллергия на херню.
Может ты еще к ТС домой приедешь и за него все сделаешь? Суть проблемы какбэ сразу очевидна (надеюсь : ) Я бы мог написать "скопируй файл в каталог сборки", он бы это сделал и может и не понял ничего и на этом успокоился и забыл через 5 минут. А так бы он повозился немного, раз сразу не получилось, и что-то понял, так как проблема не стоит и выеденного яйца. Это ^ тоже офтоп? Название: Re: Начало работы с Qt Отправлено: Day от Январь 13, 2012, 12:58 Ребята, не ссорьтесь, пожалуйста, а то мне как-то неудобно. Только пришел на форум, и тут такую бучу поднял!
Приведенный пример полностью рабочий :) Вот так все работает! Спасибо!Сделай проще - картинку скопируй в корень диска "С:\" допустим. И путь к ней укажи полный "С:\stone.jpg". в какой папке у тебя присутствует stone.jpg? Там где исходники? Да! Там где исходники. И exe там же!Обрати внимание откуда запускается твоя программа. Так какую папку Qt считает текущей? Какую-то свою? И как тогда понять папку экзэшника? В Borland Builder я знаю как, есть там такая АПИ, не помню навскидку как зовут. А если под Линуксом - тогда как? Это же все должно быть кроссплатформенно, за этим и шел. Там даже палки не такие! ЗЫ. Запускал прямо из Qt. Пока с ДЛЛ не разобрался. Пока топчу первые грабли. Название: Re: Начало работы с Qt Отправлено: Bepec от Январь 13, 2012, 13:02 Код: QApplication::applicationDirPath () А насчёт бучи не беспокойся. Это просто андрев.к нервничает при виде меня ^^ PS andrew.k чтобы узнать и понять проблему с путями, нужно сначала её решить. Можно одному, а можно спросить. В 1 случае зазря потеряешь время(1 функция в глубинах qApplication), во 2 экономия времени :) Название: Re: Начало работы с Qt Отправлено: Bepec от Январь 13, 2012, 13:15 stima, а если пользоваться VS2008, то она сначала ищет в папке с иходниками, а только после этого в дебаге (ну релиз соответственно сам у себя ищет, никуда не заглядывая.)
Название: Re: Начало работы с Qt Отправлено: kambala от Январь 13, 2012, 13:28 для хранения разнообразных ресурсов можно (и лучше?) пользоваться файлом ресурсов *.qrc. Это обычный текстовый файл, в который добавляются пути к файлам (для удобного добавления с Qt идёт небольшая утилита). зато потом в коде пути к ним можно использовать относительные, например: QPixmap(":/stone.jpg").
В книжке наверное дальше об этом будут рассказывать :) Название: Re: Начало работы с Qt Отправлено: Day от Январь 13, 2012, 13:36 stima,
Цитировать Day я лично сомневаюсь, что у тебя .exe был в папке с исходниками, если ты конечно не переписывал .pro файл. Ничего я не переписывал. В pro:И это не "недочет Qt" это просто не понимание, что происходит. Win32:TARGET=..\ScrollArea .exe точно в этой же папке. И по времени смотрел - тот самый. Но тут дело значительно хужее. Переписал я в папку с исходниками и exe библиотечки mingwm10, qtcore4, qtgui4.dll, чтоб значит, независимым быть. Запускаю - нет картинки! И с jpg в корне, и в текущей. Выкинул библиотеки. Запуск из Qt с картинкой в корне - все Ок! Ладно, чуть попозже попробую с applicationDirPath, но вообще-то мне это начинает не нравится. Правда, библиотеки я брал с предыдущей установки Qt, но с того же дистрибутива и по дате-размеру они совпадают Название: Re: Начало работы с Qt Отправлено: Bepec от Январь 13, 2012, 13:46 Вы прежде чем независимым быть, спросили бы у людей, а что нужно с собой брать.
Идите в папку Qt "C:\Qt\4.7.2\plugins\imageformats\". Идетё в папку со своей программой, и копируете туда "imageformats\qjpeg4.dll" - каталог там должен быть именно с таким названием. А в нём dll. Это позволяет использовать формат jpeg для картинок. PS а я начал уважать png. Для него вроде кодеки ненужны :D Название: Re: Начало работы с Qt Отправлено: Day от Январь 13, 2012, 13:48 Переписал библиотеки из последней поставки - все Ok!
Будем считать это глюком. Но при картинке в текущей директории запуск из Qt ее не видит. А если тупо запустить экзэшник - все хорошо. Название: Re: Начало работы с Qt Отправлено: Day от Январь 13, 2012, 13:53 Верес,
Цитировать Это позволяет использовать формат jpeg для картинок. ИМХО, он же формат jpeg и без этой либы понимает. Когда находит - прекрасно рисует. Вот только находит не всегда.Название: Re: Начало работы с Qt Отправлено: _OLEGator_ от Январь 13, 2012, 13:55 to Bepec
не совсем верно, при запуске из под студии ищет относительно файла проекта Название: Re: Начало работы с Qt Отправлено: Aluman от Январь 13, 2012, 14:01 Проекты->Настройки сборки.
Там есть галочка Теневая сборка. Если она не установлена, то у тебя будет только одна папка, которая и будет текущей. Если галочка установлена, то текущей будет папка указанная в соот поле. При этом экзешники будут находится в поддиректориях release и debug, для релизной и дебажной сборки соответственно. P. S. лучше используй файлы ресурсов, как уже советовали, и не придется заморачиваться с путями, тогда все картинки будут хранится в виде массива байт. Название: Re: Начало работы с Qt Отправлено: Bepec от Январь 13, 2012, 14:09 Day а ты попробуй удали эту папочку с плагинами. Посмотришь как у тебя он будет воспринимать :D
Когда ты запускаешь программу на своём компьютере, она ищет по путям и находит плагины. Соответственно картинка показывается. Когда ты запустишь программу на компьютере без этих плагинов (или удалишь их из папочки Qt). То картинка у тебя будет пустым обычным виджетом. to OLEGator спасибо за поправку, буду знать ^^ Название: Re: Начало работы с Qt Отправлено: Day от Январь 13, 2012, 14:15 Ресурсы - это конечно здорово! Сразу снимает кучу проблем. Но вот что делать, если я хочу предоставить юзеру возможность самому выбрать картинку? Не говоря уж о том, что картинка может создаваться динамически.
Но дело не в этом. Меня интересует механизм поиска файлов. Ведь не только картинки я буду искать. Там и базы данных будут, а уж в ресурс никак не засунешь Ну, вот теперь знаю, что с Qt в этом смысле надо ухо держать востро. И за это всем спасибо! Название: Re: Начало работы с Qt Отправлено: Day от Январь 13, 2012, 14:25 Цитировать Aliman, Проекты->Настройки сборки. Не нашел такой галочки, увы! Но в папке debug вообще пусто, а в release одинокий main.oТам есть галочка Теневая сборка. И экзешник точно в исходной папке. Клянусь! Я ж его запускаю без оболочки Qt. И никаких проблем. Не считая 20 Мб библиотек. Но это уже будет другая тема. Название: Re: Начало работы с Qt Отправлено: kambala от Январь 13, 2012, 15:00 Ресурсы - это конечно здорово! Сразу снимает кучу проблем. Но вот что делать, если я хочу предоставить юзеру возможность самому выбрать картинку? Не говоря уж о том, что картинка может создаваться динамически. когда пользователь выбирает файл/папку, в программе доступны полные пути, с которыми нет никаких проблем. а про QCoreApplication::applicationDirPath() уже говорили.Но дело не в этом. Меня интересует механизм поиска файлов. Ведь не только картинки я буду искать. Там и базы данных будут, а уж в ресурс никак не засунешь Ну, вот теперь знаю, что с Qt в этом смысле надо ухо держать востро. И за это всем спасибо! Название: Re: Начало работы с Qt Отправлено: Day от Январь 13, 2012, 18:58 Все понятно.
Код: qDebug() << "Dir of EXE:" << QApplication::applicationDirPath(); // Без палки Код: Запускается H:\QtExamp\chapter05\ScrollArea\ScrollArea.exe... Но хорошо, что научился пользоваться qDebug() Название: Re: Начало работы с Qt Отправлено: kambala от Январь 13, 2012, 19:30 "палки", называемые слэшами, в коде Qt-приложений надо использовать всегда только прямые - /
исключение составляет лишь использование windows api при написании windows-only кода, а также обращение к виндовому реестру через QSettings (может есть еще какие-то моменты, о которых я не знаю) - там надо использовать нативные обратные слэши \, которые в строке надо экранировать другим обратным слэшем. Название: Re: Начало работы с Qt Отправлено: Day от Январь 13, 2012, 20:03 "палки", называемые слэшами, в коде Qt-приложений надо использовать всегда только прямые - / Это все, конечно, чрезвычайно радует. Как вы сказали? "кроссплатформенность"исключение составляет лишь использование windows api при написании windows-only кода, а также обращение к виндовому реестру через QSettings (может есть еще какие-то моменты, о которых я не знаю) - там надо использовать нативные обратные слэши \, которые в строке надо экранировать другим обратным слэшем. Кстати, когда я задавал полный путь своим картинкам, пришлось использовать экранированные обратные слэши, прямые были проигнорированы. Название: Re: Начало работы с Qt Отправлено: Авварон от Январь 13, 2012, 22:08 "палки", называемые слэшами, в коде Qt-приложений надо использовать всегда только прямые - / Можно писать абсолютно любые слэши - хоть "C:\\folder\\/folder/file.txt" Внутри себя Qt уже преобразует это к виду "C:/folder/folder/file.txt" независимо от платформы и уберет все двойные слеши. См. QDir::cleanPath() Название: Re: Начало работы с Qt Отправлено: LisandreL от Январь 13, 2012, 22:23 исключение составляет лишь использование windows api при написании windows-only кода WinAPI прекрасно работает с прямыми слешами.Название: Re: Начало работы с Qt Отправлено: kambala от Январь 13, 2012, 22:52 сколько всего нового можно узнать за день :)
Название: Re: Начало работы с Qt Отправлено: andrew.k от Январь 13, 2012, 22:55 Проверил, даже в командной строке виндус работают прямые слеши.
Код
Название: Re: Начало работы с Qt Отправлено: Day от Январь 14, 2012, 11:52 Проверил, даже в командной строке виндус работают прямые слеши. Вы правы. Они не работают только для некоторых старинных версий command.com, но это можно уже в расчет не принимать. А если у меня они где-то задействованы, ну что ж, это лично моя вина.Код
Всем спасибо! Название: Re: Начало работы с Qt Отправлено: lit-uriy от Январь 15, 2012, 16:13 прямые слеши ещё криво работают при указании диска:
D://tram-pam-pam Название: Re: Начало работы с Qt Отправлено: andrew.k от Январь 15, 2012, 16:46 прямые слеши ещё криво работают при указании диска: может потому что прямой слеш не нужно дублировать?D://tram-pam-pam хотя должно и с дублированием работать. Название: Re: Начало работы с Qt Отправлено: kambala от Январь 15, 2012, 18:08 на 7 с дублированием работает
Код: C:\Windows\system32>cd C://Qt |