Russian Qt Forum
Июнь 28, 2017, 05:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [1] 2 3 ... 84
1  Qt / Qt Embedded / Динамические разрешения Android 6.0 в Qt 5.9 : Июнь 06, 2017, 22:01
Пишут, что в Qt 5.9 есть поддержка динамических разрешений (permissions), которые появились в Android 6. Чё-то нигде не могу найти как это реализовано, как этим пользоваться. Они же необходимы, чтобы настройки сохранять, и для кучи других действий. Везде в сети нахожу только ссылки на баг трекер и упоминания о том, что публично решение доступно в релизе Qt 5.9. В самом релизе не получается найти. Кто-нибудь разбирался как этим пользоваться?
2  Qt / Qt Embedded / Re: Добавить Android API level 23 к установленному 15 : Июнь 05, 2017, 19:45
Да, проект на виджетах. У меня был развёрнут API 15, в проектах было target==minimum==15. И в готовых проектах так и должно остаться. В новых должно быть target==23, minimum==15. Установил через SDK Manager соответствующие модули для API 23, но пока ещё не начинал собирать. Не знаю - не будет ли проблем с компилятором (GCC 4.9), установленным NDK (r12b) и его отладчиком. Помню, что когда в первый раз устанавливал, вроде были какие-то несовместимости пакетов, не всё сразу заработало.
3  Qt / Qt Embedded / Добавить Android API level 23 к установленному 15 : Июнь 05, 2017, 13:56
Создаю приложения для Android в Linux 14. Приложения собираются с API level 15 всё хорошо. Мне необходимо это сохранить. Но для создания нового приложения требуется API level 23. То есть, мне нужно сохранить возможность сборки с API level 15, и получить возможность сборки с API level 23. Как я устанавливал и настраивал всю эту мутоту, я уже точно не помню. По идее, должно быть достаточно в Android SDK Manager установить один пакет. Запускаю этот менеджер, он сам предлагает сделать апдейт Android SDK Tools 25.1.7, Android SDK Platform-tools 24, Android Support Repository, Google Repository. Вот тут мне уже не понятно - действительно ли необходимо обновлять все эти пакеты? Не потеряю я при этом возможность сборки с API level 15? Кто-нибудь работает на одной машине с двумя API разных версий? Какие есть подводные камни?

Заодно - везде, в том числе и на фирменном сайте Google, советуют для установки какого-то одного пакета использовать командную утилиту sdkmanager. Но у меня её почему-то нет, не нашёл в каталогах где установлен Android SDK.
4  Qt / Дополнительные компоненты / Re: Библиотеку-клиент для работы с POP3/SMTP/IMAP для Qt ещё не сделали? : Май 26, 2017, 01:17
SmtpClient - это интересно. Но мне и получать хочется... По идее это должен быть единый комплект.
5  Qt / Дополнительные компоненты / Библиотеку-клиент для работы с POP3/SMTP/IMAP для Qt ещё не сделали? : Май 24, 2017, 22:27
Никто не встречал? Чтобы только загнать вызовами адрес почты, настройки соединения и дёрнуть "отправить". Не возиться с почтовым MIME, кодировками, атачами и прочим. А для приёма настроить подключение, интервал опроса и потом ловить в слоте сигнал с упакованным письмом. И конечно, чтобы это всё с Qt правильно и хорошо работало, то есть, само было сделано с его использованием.

А то очень хочется в совершенно стороннее для почты приложение встроить отправку и получение писем, для организации общения пользователей, но без выделенного для этого сервера. Но возиться с изобретением очередного почтового велосипеда не хочется.

6  Qt / Qt Embedded / Re: Эффекты боковых шторок в Android : Апрель 27, 2017, 02:12
Вообще вся мобилка по хорошему если пишется в Qt, то на QML, ставьте Qt 5.8 глядите примеры по Qt Quick Controls 2 и будет вам счастье.

Без QML никак? Воротит меня от него... По идее, всё что делается на QML, должно делаться и на C++, так как его объекты под крышкой с названием QML лежат.

В Qt Quick Controls 2 я нашёл эту штуку - Drawer Control. Ладно, посмотрим подробнее...
7  Qt / Qt Embedded / Re: Эффекты боковых шторок в Android : Апрель 27, 2017, 02:09
Вы о Navigation Drawer чтоли?
Как вариант. Но во-первых шторка может быть и справа, во-вторых у неё не обязательно функции навигации. Могут быть и какие-то данные, выбор из таблицы.
8  Qt / Qt Embedded / Эффекты боковых шторок в Android : Апрель 26, 2017, 01:21
В Андроиде принято делать приложения, у которых по свайпу слева или справа появляются дополнительные "шторки" приложений. Там могут быть разные меню, настройки и т.д. Ну ладно, свайп я как-нибудь сам поймаю. А все эти шторки на Qt как - самому руками двигать? Или может для этого средства есть? А может есть идеальные? - Назначить на свайп слева появление слева окна, в котором можно свои виджеты расположить, и чтобы это окно автоматом подстраивалось под размеры экрана. Есть вообще такое для Qt?
9  Qt / Qt Embedded / Re: (РЕШЕНО) Странный глюк в Android - баг в Qt или Android : Апрель 11, 2017, 20:44
Окончательное решение, которое работает, без использования Java кода, не шибко элегантное, но простое.
В приватных свойствах класса виджета, наследующего QFrame:
Код:
QRect geo;
Где-то в конструкторе или инициализации виджета, лишь бы пораньше:
Код:
geo = geometry();
В начале paintEvent() этого виджета пишем:
Код:
   if( geo != geometry() )
        setGeometry( geo );

Дальнейшее нужно, если геометрия виджета может меняться в процессе работы приложения. Надо не забывать при каждом таком изменении сохранять новую геометрию в geo = geometry();. Кроме этого, в классе виджета заводим слот:
Код:
void screenWasLocked(){ geo = geometry(); }
В объявлении класса главного окна приложения, которое наследует QMainWindow создаём сигнал:
Код:
   void screenIsLocked();
Ниже него слот:
Код:
void appStateChanged(Qt::ApplicationState state)
{
    if( state == Qt::ApplicationSuspended )
        emit screenIsLocked();
}
Где-нибудь в конструкторе этого класса:
Код:
   connect(QApplication::instance(), SIGNAL(applicationStateChanged(Qt::ApplicationState)), SLOT(appStateChanged(Qt::ApplicationState)));
И, наконец, в дизайнере соединяем сигнал screenIsLocked() главного окна со всеми слотами screenWasLocked() всех виджетов, которые расположены на форме. Всё.

Это работает. Каждый раз при перерисовке QFrame будет выполняться лишнее сравнение с вызовом geometry(), но это стоит недорого.
10  Qt / Qt Embedded / Re: (РЕШЕНО) Странный глюк в Android - баг в Qt или Android : Апрель 11, 2017, 19:13
Не, ну ваще... сделал топором - сохраняю геометрию при залочивании экрана, и вызываю восстановление при разлочивании. В дебаг выводе всё хорошо, восстановилось. Но потом по чьему-то желанию происходит ещё одна перерисовка, и бабах! Виджетов три штуки, в paintEvent перед рисованием у каждого выводится
Код:
       qDebug()<<"repaint"<<"frame"<<frameRect()<<"geometry"<<geometry();
и получаю вот такое:
Цитировать
D/AlpsGL17(24511): (null):0 ((null)): repaint frame QRect(0,0 307x21) geometry QRect(471,320 307x21)
D/AlpsGL17(24511): (null):0 ((null)): repaint frame QRect(0,0 83x30) geometry QRect(471,270 83x30)
D/AlpsGL17(24511): (null):0 ((null)): repaint frame QRect(0,0 307x20) geometry QRect(471,340 307x20)
D/AlpsGL17(21709): (null):0 ((null)): repaint frame QRect(0,0 307x21) geometry QRect(471,320 307x21)
D/AlpsGL17(21709): (null):0 ((null)): repaint frame QRect(0,0 83x30) geometry QRect(471,270 83x30)
D/AlpsGL17(21709): (null):0 ((null)): repaint frame QRect(0,0 307x20) geometry QRect(471,340 307x20)
D/AlpsGL17(21709): (null):0 ((null)): repaint frame QRect(0,0 1280x752) geometry QRect(471,320 1280x752)
D/AlpsGL17(21709): (null):0 ((null)): repaint frame QRect(0,0 1280x752) geometry QRect(471,270 1280x752)
D/AlpsGL17(21709): (null):0 ((null)): repaint frame QRect(0,0 1280x752) geometry QRect(471,340 1280x752)

То есть, сначала рисует виджеты правильного размера, а потом сразу испорченного. И это уже после того, как экран разблокирован. Но! Только если экран в положении портрет. В положении ландшафт при тех же действиях только один раз:

Цитировать
D/AlpsGL17(24511): (null):0 ((null)): repaint frame QRect(0,0 307x21) geometry QRect(471,320 307x21)
D/AlpsGL17(24511): (null):0 ((null)): repaint frame QRect(0,0 83x30) geometry QRect(471,270 83x30)
D/AlpsGL17(24511): (null):0 ((null)): repaint frame QRect(0,0 307x20) geometry QRect(471,340 307x20)

И разумеется всё нормально.

Отсюда единственный выход виден - сохранять размеры этих трёх виджетов при старте приложения, и использовать их для рисования в paintEvent(). Потому что где портится геометрия, выяснить уже становится совсем сложно. Правда тогда придётся отслеживать изменение размеров в дизайнере, поскольку там они вполне могут изменяться.
11  Qt / Qt Embedded / Re: (РЕШЕНО) Странный глюк в Android - баг в Qt или Android : Апрель 11, 2017, 17:19
Баг запостил? Улыбающийся

Да, конечно. QTBUG-60101.

Вот как его обойти - пока ещё не решил. Могу, конечно, повесить в Java коде обработчик события блокировки клавиатуры (для screen lock/unlock отдельного события в Android нет) и вызывать из него Native функцию, дальше из неё сигнал, и по нему в виджете сохранять и восстанавливать геометрию QFrame. Этот вариант понятен. Но может есть вариант какой-то более элегантный, чем топор... Думаю.

Сигнал QCoreApplication::applicationStateChanged(Qt::ApplicationActive) не хиляет - он посылается до фактической разблокировки, когда виджет ещё имеет нормальный размер.
12  Qt / Пользовательский интерфейс (GUI) / События или сигналы про screen lock/unlock : Апрель 11, 2017, 16:54
Поиском не нахожу, на память не помню чтобы встречалось в описаниях. Но может пропустил. Этого на самом деле в Qt нет? Недостаток, однако...
13  Qt / Qt Embedded / Re: Странный глюк в Android 6 : Апрель 11, 2017, 15:03
Опа, опа - есть баг в Qt! В paintEvent() виджета я использую вызов frameRect() чтобы получить прямоугольник для заливки фона. По неизвестной причине (очевидно дыра в Qt для Android или в самом Android) если включена блокировка устройства и экран повёрнут в портрет, то эта функция возвращает не прямоугольник самого виджета, а... прямоугольник экрана. Причём она возвращает также прямоугольник экрана и после того, как блокировка снимается, и экран переводится в ландшафт. Если блокировка не включена, или если экран блокируется в ландшафте - то всё работает нормально. Может быть, это дырка и не Qt, а самого Android, но она срабатывает в версиях Android 4.0.3 и 6.0.

Ну да, не просто frameRect() портится - а geometry(). Причём это происходит только с QFrame.

14  Qt / Qt Embedded / Re: Странный глюк в Android 6 : Апрель 10, 2017, 23:10
Чуть-чуть удалось продвинуться - выяснил, что из трёх виджетов, один перерисовывается (вызывается его paintEvent()) в момент до того как снята блокировка экрана, или даже во время её снятия, а два других после этого. Вот тот, который рисуется до снятия блокировки, и ломает всю консерваторию. Отложить рисование до окончания снятия блокировки пока не получилось. Перерисовка всего окна после снятия блокировки вызовом repaint() тоже ничего не даёт.

ЗЫ

Ситуация ещё хуже. Портится структура виджета, который перерисовывается до снятия блокировки. Если виджет динамически убрать, он пропадает. Но если его вернуть - он рисуется с тем же искажением.

Вот же блин...
15  Qt / Qt Embedded / Re: Странный глюк в Android 6 : Апрель 06, 2017, 22:57
О! Смог поймать этот же глюк в Android 4 SDK level 15. Проблема не характерна для Android 6. Это как-то обнадёживает - в Android 4 у меня хотя бы отладка работает нормально.
Страниц: [1] 2 3 ... 84
Страница сгенерирована за 0.073 секунд. Запросов: 23.