![]() |
|
![]() ![]() ![]() |
|
КунгФуЧайник |
|
|||
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 10.8.2011 Репутация: нет Всего: нет |
Есть взаимодействие с ОС: графическими компонентами, базами данных, сенсорами и прочими датчиками устройства и т.д. Краем уха слышал, что для разработки под андроид нужно еще скачать их NDK. Предположил, что все эти компоненты Qt (кнопки, списки, коннекторы и проч.) - обертки над существующими в целевых ОС соответствующими компонентами. Тогда получается:
1. Чтобы разрабатывать под какую-либо ОС необходимо скачать ее NDK, где описан код всех этих компонентов (различные гуи, доступ к базам, датчикам, сенсорам). При компиляции Qt заменяет код обращения к, например, Qtкнопке на "правильное" обращение из NDK. 2. Если в Qt нет компонента для работы с какой-либо возможностью, которая существует в целевом NDK (например, мультитач, гпс и т.п.), то реализовать в своей программе такую возможность я не смогу. |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
До Qt5 код компонентов Qt (например, QPushButton) выглядел (с бооооольшой натяжкой) примерно след. образом:
и... естественно, чтобы компилятор видел эти самые windows.h и CreateButton нужно, чтобы он знал, где лежат эти h-ники и lib-файлы (читай, чтобы знал, где находится NDK) Qt - это просто набор библиотек для Си++ (впрочем, не только). Такой же набор библиотек, как, например, STL или boost (первый, правда, идёт с компилятором, а второй нужно ставить, но это - не важно). Так что если какой-то фичи нет в Qt, но есть в NDK, то ты можешь совершенно спокойно использовать где можешь компоненты Qt, а где нет - вызывать функции NDK (главное, чтобы твой компилятор знал о нём). Единственный минус - ты теряешь при этом кроссплатформенность, т.е. если взять твою программу, написанную на Windows и попробовать перекомпилировать на linux, то повалят ошибки. Однако, ничто не мешает тебе сделать точно таким же образом, как сделали разработчики Qt... Это сообщение отредактировал(а) borisbn - 16.2.2013, 14:43 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
Amp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 7 Всего: 17 |
Нет. Qt сам рисует контролы в соответствии с заданным стилем. Просто, обращаясь к некоторым системным или библиотечным (в случае с GTKStyle) функциям, их можно рисовать в точности как родные на заданной платформе. Обертки - это в wxWidgets (и то не везде). Это сообщение отредактировал(а) Amp - 16.2.2013, 14:45 |
|||
|
||||
КунгФуЧайник |
|
|||
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 10.8.2011 Репутация: нет Всего: нет |
Я думал, что "кроссплатформенный" -- это просто унифицированный способ взаимодействия с компонентами различных ОС. Косметика. А вот при компиляции сгенерируется нативный код за место такой унификации, как в примере borisbn. И, получается, механизм отрисовки включается нативного кода, а не Qt. То есть вызов к QButton будет заменен на вызов к "windowsButton", если такая целевая ОС выбрана. А где-нибудь внутри cpp этого компонента описана функция Draw(), которая и будет вызвана (предположение). Поэтому что из себя представляют "компоненты Qt" -- не очень понимаю. Это сообщение отредактировал(а) КунгФуЧайник - 16.2.2013, 15:19 |
|||
|
||||
Amp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 7 Всего: 17 |
В Linux отсутствует стандартный API для создания графического интерфейса, как в Windows. То есть эта ОС вообще никак не определяет как выглядят виджеты вроде кнопок, списков, меню. Все работает, как описал borisbn, только в случае с UI все просиходит на уровень ниже. Дергаются нативные функции для создания окна и отрисовки.
|
|||
|
||||
КунгФуЧайник |
|
|||
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 10.8.2011 Репутация: нет Всего: нет |
В линуксе нет функций отрисовки гуи-элемнтов - в каждой билиотеке отрисовка реализована по-своему, либо программист пишет свою реализацию, если не пользуется чужими? О_О Что тогда "уровень ниже" и "нативные функции" -- OpenGL? |
|||
|
||||
Amp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 7 Всего: 17 |
Да, в каждой по-своему. Именно поэтому существует стиль QGtkStyle для Qt и темы вроде Oxygen - чтобы заставить основную массу приложений выглядеть более-менее одинаково. Уровень ниже - это XLib (или XCB в случае Qt5). Можно и на OpenGL, хотя в этом случае все равно придется прибегнуть к XLib - чтобы создать окно и организовать обработку ввода как минимум. |
|||
|
||||
КунгФуЧайник |
|
|||
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 10.8.2011 Репутация: нет Всего: нет |
Amp, теперь понятно: в случае с линукс Qt создает реализацию гуи-элементов сам.
Еще вопрос, на примере самсунга. На смартфонах-планшетах линейки note есть поддержка технологии вакома, а на других линейках - нет. Получается, что такая поддержка не на уровне ОС, а реализована в версии андроида под данное устройство. Тогда, чтобы получить доступ к вакомовскому апи, кроме NDK андроида, нужно еще качать и NDK вакома? То есть Qt + NDK целевой ОС + NDK для "фишки", уникальной только для какого-либо устройства. |
|||
|
||||
Amp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 7 Всего: 17 |
||||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
Нет. Для этого нужно найти общий для всех платформ АПИ или писать через #ifdef/#endif... Потому что, скорее всего, ваком не будет работать на андроиде. |
|||
|
||||
КунгФуЧайник |
|
|||
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 10.8.2011 Репутация: нет Всего: нет |
NDK - это набор .h, .cpp, .lib и прочих файлов, дающих api к возможностям системы: к gui и прочему. Так? У линукса gui-апи не реализовано, реализация лежит на Qt - ладно. Но у win и macOS есть же свое api, которое Qt берет из NDK.
В серии galaxy note самсунг использует технологию вакома. Но, вроде, только в этой серии. Получается, для нее есть отдельный NDK и если писать софт, который должен работать и на такой версии андроида, и на той, где поддержки вакома нет, то пользоваться как раз "#ifdef/#endif..."? |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Зачастую #ifdef не пользуются, а создают файлы myclass.h, myclass.cpp, myclass_p.h, myclass_win.cpp, myclass_mac.cpp, myclass_linux.cpp и т.д. и в проект включают версию файла для нужной платформы.
А хочешь портабельность для android - пиши на java. |
|||
|
||||
_GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
Qt для Android - это Necessitas - с недавнего времени включён Digia в свой сдк, в плане поддержки Qt на Android.
Я писал на нём ещё до этого "включения" - на 4.8 - всё нормально, неприятно только, что на устройстве потребуется ещё Ministro поставить (тоже от производителя Necessitas) - который на устройство необходимые сборки Qt библиотек затянет. Это сообщение отредактировал(а) _GRIN_ - 18.2.2013, 18:54 -------------------- Дорогу осилит идущий |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |