Перейти к содержанию
BlackBerrys.ru
Eastwoody

Программирование под BB10

Рекомендуемые сообщения

Всем доброго времени суток, вот решился с головой окунуться в программирование под десятую ОС.

Хочу сразу заметить, меня интересуют советы, которые только дадут пинка для развития.

Но проблема в том, что опыта нет. Только знаком с портированием с ведроида, но продукты из этого сегмента не очень тепло встречают на рынке приложений. Хочется начать писать простенькие нативные приложения, постепенно набирая опыт и развиваться в этом русле, чтобы кол-во перешло в качество.

Главное что меня интересует, так это с чего начать? Выбор платформы:

  • С/С++(Native SDK)
  • HTML5(WebWorks)
  • ActionScript(Adobe Air)

1) Каскады - очень интересная вещь, но без опыта это как писать книгу, неумея писать.

2) HTML5 - вполне достойно, вот тут небольшой опыт есть. Но актуален софт написанный на этом?

3) Адоб - ????

В чем проще начать? И главное, с чего начать?

Буду рад услышать ваше мнение.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Живут же люди, alpha dev есть, а кодить нема. :(

По теме:

Только СС++ асм, только хардкор. :) Как я понял native CC++ можно юзать для игр ну и еще для "специфик апликейшн"

это как я понимаю не ваш метод. Если игры то это муторно и долго, много аспектов знать нужно один только рендер понять чего стоит (если ничего не знаешь). Игры писать это забавно, но это только в начале, потом гемороя много. :

Вам лучше начать с чего нибудь повыше (высокоуровневый АПИ) и это как мне кажеться Каскады на С++, именно так вы поймете как вообще эта "машина" работает. Начать надо со всяких, нажал на кнопу, заиграла музыка или появилось окно. Главное понять как вообще все крутиться и вертиться. Без знания языка сложно будет и долго. Хоть что выбирай.

Конкретных рекомендаций вам никто не даст. Самая лучшая рекомендация, это делать не то что тебе хочеться, а то что от тебя требуют. (заказ) так на много быстрее будет.

Главное что меня интересует, так это с чего начать? Выбор платформы:

  • С/С++(Native SDK)
  • HTML5(WebWorks)
  • ActionScript(Adobe Air)

Урок № 0000000001. Платформа у нас одна bb10, а вот инструментов много это SDK. Платформы проще говоря это "машина" arm, x86, 64, Itanium. , дальше можно делить еще windows, linux, macos, ios, android, bb os 10. Инструменты (SDK = можно перевести как инструмент разработчика)

Успехов!

Изменено пользователем shaderman

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Начинайте сразу с каскадов, если вы игры не пишете. Если же игры, то увы и ах - только CC++.

Если пишете клиентов веб сервисов, то HTML5.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Игры не собирался и не собираюсь писать, ориентируюсь больше в сторону софта/мессенджеров/клиентов. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как по мне, надо смотреть в сторону Cascades: можно в QML наваять GUI, использовать объекты Qt/SDK, а для логики использовать JS; ну и подключать C++, если будут использоваться сторонние библиотеки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ребята подскажите, не могу понять следующую проблему:

Есть файлы *.qml в них набраны контролы (элементы)

Есть главный файл qml, скажем main.qml

И есть меню выбора оно находиться в файл  menu.qml

Вопрос? Как мне управлять контролами из С++ из файла menu.qml ?

В частности нужно заполнить dropdown, но как?

Если я app->SetScene(root) устанавливаю main.qml и все пошел главный цикл.

Как это сделать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

0) между QMLDocument::create() и app->setScene() добавляем контекстное свойство "dropDownItems":

 

QVariantList *dropDownItems = new QVariantList(this); // альтернатива: QVariantMap, если хочется dropDownItems.value1, .value2, etc.
// заполняем...
qml->setContextProperty("dropDownItems", dropDownItems);

 

 

1) пристёгиваем определение "опции":

 

attachedObjects: [
   ComponentDefinition {
     id: option Option{} 
  }
]
 
2) заполняем наш DropDown элементами, полученными из C++, в onCreationCompleted() или в любом другом месте кода:

 

onCreationCompleted() {

  for(var x = 0; x < dropDownItems.length; x++) {

    var opt = option.createObject();
    opt.text = dropDownItems[x];
    myDropDown.add(opt); 
   }
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вообще, если хочется позвать C++ - кусок из QML:

1) аттачим какой-нибудь объект - наследник QObject через setContextProperty

2) помечаем в этом наследнике вызываемые методы с помощью Q_INVOKABLE

3) вызываем по имени

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо но все равно не понял. :(

 

вот код

 

void main()

{

   QMLDocument::create("main.qml");

  

  app::setScene(root); //назначили основную страницу

 

  app::exec(); //вошли в цикл

 

}

 

Запустилась программа. Нажал на кнопку (которая размечена на main.qml" ) попал в "pageOne.qml" там есть DropDown;

 

как мне получить доступ к контролам в pageOne.qml ? в частности DropDown.?

 

И где находистся обработчик скажем главного цикла , если он вообще есть.

Чего то я так и не понял архитектуру приложения. И в документации нету :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обработчик основного цикла лежит в exec(), и лучше его не трогать :)

 

Не надо из C++ получать доступ к контролам - технически можно, но обычно не нужно.

Это лучше делать на JavaScript в QML. Пункты 1 и 2 из моего поста - это часть QML.

В C++ определяем только QObject'ы и данные. Пункт 0 - это плюсовая часть.

 

QObject имеет 3 основных сущности, доступных из QML:

1) методы Q_INVOKABLE: всё, что можно просто звать из QML

2) свойства Q_PROPERTY: всё, что может вернуть нам значение, или куда это значение можно положить

3) сигналы Q_SIGNALS: события о том, что что-то изменилось

 

В C++ ты создаёшь только объекты, с которыми будет оперировать UI, и засовываешь их в контекст с помощью setContextProperty(имя_объекта, сам_объект).

 

Например, тебе надо вызвать обработчик кода на C++, который залезет по сети в Пентагон, скачает последние разведданные и как-то сообщит об этом пользователю:

 

в C++ создаём класс PentagonHacker, наследуем его от QObject

 

засовываем в QML-контект с помощью setContextProperty("pentagonHack", new PentagonHacker(app))

 

создаём сигнал, который получит интерфейс:

Q_SIGNALS:

    void intelligenceDownloaded();

 

создаём метод, который умеет скачивать данные:

Q_INVOKABLE downloadIntelligence();

Когда этот метод отработает, он должен вызвать

emit intelligenceDownloaded();

 

В QML нам надо сделать 2 привязки:

1) вызов метода downloadIntelligence по нажатии кнопки "Пуск":

2) показ MessageBox'а по сигналу intelligenceDownloaded:

 

Button {

   id: startButton

   text: qsTr("Скачать разведданные")

   onClicked {

      pentagonHack.intelligenceDownloaded.connect(onIntelligenceDownloaded)

      pentagonHack.downloadIntelligence()

   }

   function onIntelligenceDownloaded() {

      startButton.text = qsTr("Ура, скачали, больше не нажимай!")

   }

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обработчик основного цикла лежит в exec(), и лучше его не трогать :)

 

Не надо из C++ получать доступ к контролам - технически можно, но обычно не нужно.

Это лучше делать на JavaScript в QML. Пункты 1 и 2 из моего поста - это часть QML.

В C++ определяем только QObject'ы и данные. Пункт 0 - это плюсовая часть.

Кажеться начинает доходить. :) Тут есть схожеть с WinRT C++ под Метро интерфейс.

 

Большое спасибо. Буду курить маны дальше :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

пока мне чего то проще все на С++ описать. :(

QML походу геморой еще тот для меня. Ни документации ни чего нету. Одни какие то примеры дикие.

Я думал будет так, Контрол , описание и как связать через С++ и так для каждого. Тут же.... :(

Я раньше думал под WinRT Metro сложно писать, но я ошибался. По мне дык Cascades это даже сложнее чем игры писать без них.

В общем пока одни эмоции (отрицательные)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще созрели два вопроса :)

 

1. Могу ли я создавать свои конторлы. ? как пример.

Создаю свой класс именно от DropDown а не от QObject или Custom Control

class MyDropDown : public DropDown

{

          
};

 

в конструкторе заполняю

MyDropDown::MyDropDown()

{

  this->Add(Option::("Test");

}

 

регистрирую его

qmlRegisterType<MyDropDown>("my.library", 1, 0, "MyDropDown");

 

в qml файле делаю так.

 

import bb.cascades 1.0
import my.library 1.0

Page
{
    Container
    {
        attachedObjects:
            [
                MyDropDown
                {
                    
                }
            ]

    }

}

 

Но почему то не появляется на экране DropDown.

 

Что я делаю не так?

 

 

2. Второй вопрос. КАк совместить qml и opengl графику.

 

Скажем я сдедал Navigation pane и там есть превью фотографий, и я хочу применять к ним различные шейдеры (блур, деформации и т.д.)

но как получить к этому изображению доступ чтобы загнать его в opengl.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) в QML-файле не надо засовывать MyDropDown в attachedObjects - это лишнее, нужно только если нужно хранить какой-то объект, но не показывать

 

2) никогда не пробовал, но в Community-примерах есть OpenGLView:

описание: http://developer.blackberry.com/native/documentation/bb10/good_citizen_overview_new_2006631_11.html

описание в виде презентации: http://developer.blackberry.com/native/documentation/bb10/good_citizen_overview_new_2006631_11.html

код: https://github.com/blackberry/Cascades-Community-Samples

 

Если код неожиданно проапгрейдят, нужно откатиться - сейчас во всех примерах суют cascades 1.2, а он доступен только в грядущей прошивке 10.2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) в QML-файле не надо засовывать MyDropDown в attachedObjects - это лишнее, нужно только если нужно хранить какой-то объект, но не показывать

Попробую еще раз.

Хочу сделать свой контрол DropDown, описать свои события OnSelect, OnCreate и т.д.

а в qml файле, разметить это мой контрол. Получается вся логика по заполнению значениями, реагирование на нажатие находится в С++

а разметка, размеры, выравнивание, цвет. это в qml.

Так можно?

Судя по документации так можно только надо юзать класс CustomControl , т.е прямое наследование от контрола не работает. :(

 

Во то что надо B) , спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще созрели вопросы :)

 

1. есть поле textfield где пользователь вводит текст внизу поля listview. Есть база данных слов, когда пользователь вводит

первые буквы, заполняется listview.

Пока что пришло на ум, сделать базу sql, и в событии TextField (OnTextChange) запросами из sql таскать результат и заполнять listview.

Если кто делал подобное, поделитесь опытом быстро будет или нет или есть уже готовое решение?

 

2. Есть файл на сервере, скажем он каждый день разный, в нем содержаться информация на русском. список.

Этот список я скачиваю и заполняю dropdown но там получаются каркозябры, как избежать подобной проблемы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) делал через DataSource, прописывал в нём query - работает без заметных задержек. Правда, у меня ~3000 записей всего, и фильтрация начинается после 2-ой буквы.

 

2)

 

а) хранить файл в UTF-8

 

б) или при создании потока указать кодек напрямую:

QTextStream inFile(&file);
inFile.setCodec("UTF-8"); // для виндовой кодировки - "CP1251"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И еще раз спасибо :) буду разбираться.

Изменено пользователем shaderman

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кто знает ответьте.

 

Почему когда запускаю приложение в debug, оно не останавливается на бряке. который я выставил.

Останавливается в main и все тут. Что я не так то делаю?

 

И почему то мои сообщения в консоль не выводятся.

 

зы. Писец полный :( 

Изменено пользователем shaderman

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...