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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QML + C++ + Android  (Прочитано 25527 раз)
carrygun
Гость
« : Декабрь 18, 2014, 15:02 »

Привет всем. Решил попробовать такую связку и натолкнулся на проблему, решения которой не смог загуглить.
Есть класс на C++, есть QML. Все как надо прокинул через qmlregistertype, и в общем-то на компьютере все работает хорошо. Но когда я собираю на андроид и запускаю то приложение крашится когда обращается к объекту с прокинутым из C++ типом.
Ошибка следующая: Warning: QML import could not be resolved in any of the import paths: имя_моего_типа.
Подскажите чего я не так сделал? Куда копать? Чего почитать?
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #1 : Декабрь 18, 2014, 15:10 »

Откомпилировал свою библиотеку для андроид?
Положил ли откомпилированную библиотеку в Qt для андроид в import paths ?
Записан
carrygun
Гость
« Ответ #2 : Декабрь 18, 2014, 16:01 »

У меня просто класс, ничего заоблачного. Как правильно собирать под андроид? В доке есть примеры? Или ссылки какие?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Декабрь 18, 2014, 17:01 »

У меня просто класс, ничего заоблачного. Как правильно собирать под андроид? В доке есть примеры? Или ссылки какие?

Точно также почти что, в настройках Creator указать SDK, NDK, и ant, и пересобирай проект, всё должно работать. А импортируешь ты тип случайно не через "import ТИП"? Ну и минимальный код не помешал бы.
« Последнее редактирование: Декабрь 18, 2014, 17:04 от Alex Custov » Записан
carrygun
Гость
« Ответ #4 : Декабрь 18, 2014, 17:23 »

У меня просто класс, ничего заоблачного. Как правильно собирать под андроид? В доке есть примеры? Или ссылки какие?

Точно также почти что, в настройках Creator указать SDK, NDK, и ant, и пересобирай проект, всё должно работать. А импортируешь ты тип случайно не через "import ТИП"? Ну и минимальный код не помешал бы.

Настройки я все указал, приложение собрается на телефоне и запускается нормально. Но по нажатию на кнопку я взаимодействую с объектом прокинутым из C++ и тут приложение на телефоне сразу крашится. В креаторе в консоли ошибка из первого поста.

Кину упрощенный пример.
main.cpp:
Код
C++ (Qt)
#include <QApplication>
#include <QQmlApplicationEngine>
 
#include "myclass.h"
 
int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
 
   qmlRegisterType<MyClass>("mytest", 1, 0, "Mytest");
 
   QQmlApplicationEngine engine;
   engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
 
   return app.exec();
}
 

qml:
Код
C++ (Qt)
   import mytest 1.0;
   ...
   Mytest {
       id: my_test;
       ...
   }
 

Как только я начинаю дергать методы "my_test" то приложение на телефоне закрывается.
Записан
carrygun
Гость
« Ответ #5 : Декабрь 19, 2014, 05:39 »

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

Но появился новый вопрос: как правильно узнать есть ли интернет на устройстве? Где это лучше делать в C++ или QML части?
Записан
navrocky
Moderator
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #6 : Декабрь 24, 2014, 00:10 »

Но появился новый вопрос: как правильно узнать есть ли интернет на устройстве? Где это лучше делать в C++ или QML части?

Покури вот это, как раз оно в Qt 5.4 появилось.
Записан

Гугль в помощь
carrygun
Гость
« Ответ #7 : Декабрь 24, 2014, 05:20 »

Покури вот это, как раз оно в Qt 5.4 появилось.
Что покурить то?  Улыбающийся
Записан
navrocky
Moderator
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #8 : Декабрь 24, 2014, 19:30 »

Покури вот это, как раз оно в Qt 5.4 появилось.
Что покурить то?  Улыбающийся
http://doc.qt.io/qt-5/bearer-management.html

Я ошибся, оно уже и раньше было, а в 5.4 что-то в андроиде добавили.
Записан

Гугль в помощь
carrygun
Гость
« Ответ #9 : Декабрь 25, 2014, 05:34 »


Хорошо, почитаю. Ну и раз уж такая пляска пошла, чтобы не плодить новые темы, может мне кто рассказать как например установить иконку приложению и как закрепить ориентацию экрана (portrait/landscape)?

С экраном гулил, говорят что нужно в манифест написать одну строку, все хорошо, только этот манифест генерируется по новой при деплое проекта. Что делать?
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #10 : Декабрь 25, 2014, 17:00 »

включи сгенерированный манифест в проект и поправь его в редакторе указав ориентацию экрана.
Манифест не будет генерироваться по новой при компиляции проекта
Записан
carrygun
Гость
« Ответ #11 : Декабрь 25, 2014, 20:58 »

Буду продолжать вести свой "блог" здесь.

С ориентацией экрана я справился, спасибо за подсказки, но было немножко не так как советовали. Во вкладке "Проекты" нужно было выбрать сборку и запуск для Android. На вкладке сборка в этапе сборки "Собрать Androd APK" есть группа Android с кнопкой создать шаблон. Если ее нажать то как раз таки создается вся эта муть с манифестом, отредактировал xml'ку и все стало хорошо, заодно там можно иконки задавать.

Теперь о проверке наличии интернета на устройстве. Сделал это дело в C++ части:
Код
C++ (Qt)
bool my_class::hasConnection()
{
   QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();
   foreach (const QNetworkInterface &interface, interfaces) {
       if (interface.flags().testFlag(QNetworkInterface::IsUp) && !interface.flags().testFlag(QNetworkInterface::IsLoopBack))
           if (interface.addressEntries().length())
               return true;
   }
 
   return false;
}
 

Проверил на телефоне - вроде бы работает более менее. Критика и варианты лучше приветствуются.
P.S. в гугле мне попадался QML компонент (либа?) NetworkInfo, но мне стало лень разбираться как ее прикручивать.
« Последнее редактирование: Декабрь 26, 2014, 05:29 от carrygun » Записан
navrocky
Moderator
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #12 : Декабрь 29, 2014, 20:51 »

Ну в общем-то и я ничего не нашел в самом QML для опроса состояния сети. Так что тут без вариантов - надо в плюсовом коде всё писать.
Записан

Гугль в помощь
carrygun
Гость
« Ответ #13 : Декабрь 30, 2014, 05:32 »

Пока апнули тему и не забыл, буду продолжать задавать глупые вопросы.

Следующий вопрос касается хранения небольших данных вне приложения, что-то типа настроек. Пока время было дошел только до LocalStorage. Но стоит ли его использовать если у меня не так то и много параметров нужно хранить? Смогу ли я достучаться к этому сторэджу из плюсовой части? Есть ли другие варианты? Примеры? Советы?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #14 : Декабрь 30, 2014, 11:13 »

Следующий вопрос касается хранения небольших данных вне приложения, что-то типа настроек

http://doc.qt.io/qt-5/qml-qt-labs-settings-settings.html
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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