LINUX.ORG.RU

Как сделать кнопку опций наверху?

 ,


1

5

Доброго времени суток! Собственно, сабж..

Как сделать эту самую кнопку сверху (ну та, которая обычно обозначается на Андроиде с тремя горизонтальными полосками, при нажатии на нее обычно Popup(?)Menu вылазит с опциями разного рода) вместе с заголовком приложения стандартными средствами QT?

Мне на ум приходит только идея в лоб: создать QLabel, QButton, настроить выравнивание и растяжение через политики, но в Android Studio, помнится, есть уже готовый компонент под это дело. А в QT есть?

★★

ЕМНИП, на андроиде вам либо Qt, либо 100% нативный гуй.

P.S. На всякий случай подписался, вдруг действительно есть решение...

trex6 ★★★★★
()

В QML посмотри.

EXL ★★★★★
()

QMainWindow попробуй с его toolbar или да, ставь кнопку, иконку можешь подтянуть из fontawesome.
Вообще, не стоит на андроид переть с QWidgets, он для мобильных не очень, и пилить его никто не будет. В QML, емнип, ActionBar'а из коробки тоже нет, посему лучше сразу вот сюда: https://github.com/papyros/qml-material

dib2 ★★★★★
()
Ответ на: комментарий от aido

Иконки идут от QAction, которые ты закидываешь на тубар. Выравнивание делается строго через ж0пу - вызовом QToolBar::insertWidget(), которому даешь виджет с sizePolicy Expanding по горизонтали (что-то типа spacer'а получается)

dib2 ★★★★★
()
Ответ на: комментарий от dib2

nope. ActionBar (или как там его щас в дроиде переименовали?)

а) я посоветовал набор компонентов где он есть
б) сами по себе кнопка с панелью абсолютно бесполезны, и делаются за 10 минут максимум

CrossFire ★★★★★
()
Последнее исправление: CrossFire (всего исправлений: 1)
Ответ на: комментарий от CrossFire

а) я посоветовал набор компонентов где он есть

ну тогда уже советуй оригин https://github.com/benlau/quickandroid а не полудохлый форк

б) сами по себе кнопка с панелью абсолютно бесполезны, и делаются за 10 минут максимум

ну с этим как-бы не ко мне, а вообще речь идет о кнопке бара справа, с выпадающим меню, а не о вызове navbar (слева).

dib2 ★★★★★
()

ТС, коль уж ты там возишься и если не сложно - проверь плз, работают ли меню копировать/вставить на выделенном тексте в QLineEdit или подобных виджетах на Android?

dib2 ★★★★★
()
Ответ на: комментарий от dib2

а вообще речь идет о кнопке бара справа, с выпадающим меню, а не о вызове navbar (слева)

В общем случае кнопка с тремя полосками вызывает именно drawer, о положении (право/лево) в начальном посте ничего нет, потому это было не очевидно.

CrossFire ★★★★★
()
Ответ на: комментарий от dib2

С вашими советами я в доску запутался. Параллельно разбираюсь как подключить QML, но что-то пока безуспешно.

aido ★★
() автор топика
Ответ на: комментарий от aido

С вашими советами я в доску запутался. Параллельно разбираюсь как подключить QML, но что-то пока безуспешно.

Примеры в Qt Creator'e для кого написаны?

CrossFire ★★★★★
()
Ответ на: комментарий от CrossFire

Я пример на хабре подсмотрел. не лучший вариант оказался.

aido ★★
() автор топика
Ответ на: комментарий от CrossFire

В общем случае кнопка с тремя полосками вызывает именно drawer, о положении (право/лево)

ну мне тоже только по PopupMenu стало понятно, мешанина

dib2 ★★★★★
()
Ответ на: комментарий от aido

С вашими советами я в доску запутался. Параллельно разбираюсь как подключить QML, но что-то пока безуспешно.

мама роди меня заново, я не буду программистом :3
че не понятно-то?

dib2 ★★★★★
()
Ответ на: комментарий от dib2

Весь QML. Куда в стандартных примерах засунута функция отрисовки окна? Почему вся логика программы вшита в QML-файлы? Куда делся родной и привычный С++? Что это за подобие php+css+С# в одном флаконе?

aido ★★
() автор топика
Ответ на: комментарий от aido

Куда в стандартных примерах засунута функция отрисовки окна?

по-большому счету она тебе здесь не нужна. хочется рисовать руками - Canvas

Почему вся логика программы вшита в QML-файлы?

давай посмотрим на примере с проектом на php:

Почему вся логика программы вшита в PHP-файлы?

странный вопрос, правда?

Куда делся родной и привычный С++?

С++ легко дергается из QML при надобности

Что это за подобие php+css+С# в одном флаконе?

QML хуже чем каждое из них. но на безрыбье, как говорится...

dib2 ★★★★★
()
Ответ на: комментарий от dib2

Да, но в PHP нормальные люди не вшивают CSS!

aido ★★
() автор топика
Ответ на: комментарий от dib2

Хорошо. Среди стандартных я посмотрел примера четыре и ни в одном не нашел рисовку отдельно от логики. Помнит ли кто-нибудь таковые примеры? Чтобы не С++ дергать из QML, а наоборот.

aido ★★
() автор топика
Ответ на: комментарий от aido

ну разнеси логику и представление по разным углам, причем тут QML? для логики можешь использовать QML, JS, C++.

Чтобы не С++ дергать из QML, а наоборот.

http://bfy.tw/1Ebh и дергай хоть из хоть в.

dib2 ★★★★★
()
Ответ на: комментарий от fluorite

Так-с... Ребят. Мне нужно пару дней, чтобы свыкнуться с тщетностью бытия и подучить QML. Позже отпишусь, как успехи.

aido ★★
() автор топика
Ответ на: комментарий от dib2

Вообще, не стоит на андроид переть с QWidgets, он для мобильных не очень, и пилить его никто не будет.

Причина в скорости работы/занимаемой памяти/портируемости решения или в чем?

aido ★★
() автор топика

Гугли в сторону «Qt android material design». Сейчас все помешаны на этом материал дезигне, так скорее найдешь что-то дельное, чем если просто искать как сделать кнопку сверху-слева.

anonymous
()
Ответ на: комментарий от anonymous

и правда - третьей ссылкой: http://habrahabr.ru/post/243355/

И еще вопрос: QT - полностью кроссплатформенная библиотека? в смысле, смогу ли я приложение, написанное на QT 5.3 скомпилить и запустить на давно уже не новом Android 4.1?

aido ★★
() автор топика
Ответ на: комментарий от aido

причина в том, что QWidgets вроде и не deprecated/obsolete, но в реальности их никто не пилит, особенно в направлении мобильных платформ, как следствие выглядит и работает оно далеко не «нативно». Хреново, но правда.

dib2 ★★★★★
()
Ответ на: комментарий от aido

QT - полностью кроссплатформенная библиотека?

в теории да, но на практике все очень относительно. в любом случае, если у тебя не helloworld, тестирование необходимо 100%

dib2 ★★★★★
()
Ответ на: комментарий от EXL

Но как уже сказали, виджеты в топку, нужно в QtQuick/QML.

Прежде чем затопить виджетами, я бы спросил: как QML-интерфейс работает на системах без 3D-ускорения графики? Можно ли отключить плавности и анимации и ограничиться простейшим видом программы?

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

QtQuick 1 работал без OpenGL, да. Но он стал Deprecated и его выбросили из последнего Qt.

Для QtQuick 2 нужен OpenGLES 2, без него, я так понял — никуда.

Но тут вопрос, что за система сейчас выпускается без хорошего GPU? Проблемы будут разве что с виндой, где OpenGL драйвера прямиком из 1997 года.

EXL ★★★★★
()
Ответ на: комментарий от fluorite

llvmpipe

На старом оффтопе? Извините, но хрюшу нельзя просто так выкинуть сейчас из поддерживаемых платформ, по крайней мере я не могу. Значит виджетам быть.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от dib2

Спасибо, мнения анскильных лалок не интересуют.

fluorite ★★★★★
()
Ответ на: комментарий от dib2

Баги там есть, разумеется, но инструмент мощный, и при должной поддержке аппаратной графики ни разу не тормозной. На qml легко быдлокодить. Особенно если использовать глобальные контекстные свойства объектов из плюсов, там где не надо, что превращает код в нелогичную лапшу. Но то, что qml позволяет делать код таким != нелогичен. Возможно вы не умеете его готовить.

Хотя зачем это я пишу.

Blastbit
()
Ответ на: комментарий от Blastbit

но инструмент мощный

только то, что вспомнилось: как сделать enum в компоненте например (static, const) без JS и С++? как вызывать базовую реализацию из перегруженной функции компонента? почему нельзя инстанциировать компонент по импортированному символу? как объявить attached properties не бегая в С++? почему нельзя получить id итема? Почему сетевые операции (Image например) не используют куки совместно с XHR? Почему нельзя посадить LocalStorage в WorkerScript? Как сделать clipping на Rectangle с radius>0? Почему Image не смотрит EXIF rotation? Почему нельзя засунуть null в string property? отступы в Layout появились только в 5.5. Где setTimeout() *ять?! и тд.
в совокупности с багами это дает довольно неприятные ощущения недопиленности концепции.

при должной поддержке аппаратной графики ни разу не тормозной

при этом OpacityMask, DropShadow, InnerGlow и пр. ведут себя по разному на разных устройствах и тупят даже на мощных железяках секундами (Android)

Особенно если использовать глобальные контекстные свойства объектов из плюсов, там где не надо, что превращает код в нелогичную лапшу

plugins only

Возможно вы не умеете его готовить.

а возможно что готовлю, и знаю о чем говорю. QML будет реально хорош, но уровень ему надо еще набирать

dib2 ★★★★★
()
Ответ на: комментарий от dib2

как сделать enum в компоненте например (static, const) без JS и С++?

В чём проблема сделать

class MyEnumClass : public QObject {
    Q_OBJECT
    Q_ENUMS(MyEnumClassEnum)
public:
    enum MyEnumClassEnum { First, Second };
};
qmlRegisterUncreatableType<MyEnumClass>("MyImport", 1, 0, "MyEnumClass", "Error...");
и пользоваться как MyEnumClass.First, MyEnumClass.Second в qml?

как вызывать базовую реализацию из перегруженной функции компонента?

Также, как в JavaScript.

почему нельзя инстанциировать компонент по импортированному символу?

Не понял, ты хочешь на лету создать QQuickItem? Так создай

var component = Qt.createComponent("MyQML.qml")
var item = component.createObject(parent, {});

как объявить attached properties не бегая в С++?

Также, как в JavaScript.

почему нельзя получить id итема?

Где?

Почему сетевые операции (Image например) не используют куки совместно с XHR? Почему нельзя посадить LocalStorage в WorkerScript? Как сделать clipping на Rectangle с radius>0? Почему Image не смотрит EXIF rotation?

Хз, не пользовался. Но всегда можно написать свой QQuickItem.

Почему нельзя засунуть null в string property?

Потому что null — не является валидной строкой. Используй var или пустую строку "", либо оставь значение пустым.

отступы в Layout появились только в 5.5.

Ну и отлично

Где setTimeout() *ять?! и тд.

Блин, QML — отличный View, с офигенным потенциалом к расширению из плюсов. Не нужно пытаться писать на нём логику, не нужно воспринимать то небольшое количество готовых QQuickItem'ов как всё, что есть в QML. Нужно понять декларативный подход, немного подучить JS и писать расширения на c++.

fluorite ★★★★★
()
Ответ на: комментарий от fluorite

В чём проблема сделать

очень удобно за энумами в С++ ходить. тогда уже проще в JS
а хочется простого - как в TextField например:
TextField {
echoMode: TextField.Password
}
без лишних телодвижений

Также, как в JavaScript.

QML компонент != JS объект, не получится

Не понял, ты хочешь на лету создать QQuickItem? Так создай

почему нельзя просто new MyItem() если MyItem уже импортирован? ведь по-сути произойдет то же самое.
не забываем, что загрузка может быть асинхронной, что не две строчки кода.

Также, как в JavaScript.

вы про attached properties вообще в курсе? почему их можно юзать, а создавать только на С++?

Где?

да где угодно, передал компонент параметром - как узнать его id?

Хз, не пользовался. Но всегда можно написать свой QQuickItem.

то-то же. ну прочитай мне EXIF на QML... можно и на асме все писать. но зачем? ведь это явные просчеты

Потому что null — не является валидной строкой. Используй var или пустую строку "", либо оставь значение пустым.

и тем не менее, QString может быть null! и в 99% языках string может быть null. А при работе с БД приходится выкручиваться. Неудобно

Ну и отлично

вот только баги не дают ею воспользоваться.

Не нужно пытаться писать на нём логику

а LocalStorage, WorkerScript, Models, XHR и прочие там значит just4fun? по-твоему получается, что QML - markup language со свистелками, но это не так

писать расширения на c++.

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

dib2 ★★★★★
()
Ответ на: комментарий от dib2

Лойс. Значит не меня одного ломает от такой структуры QML.

aido ★★
() автор топика
Ответ на: комментарий от fluorite

а где асинхронная загрузка? а с http? а с прогрессом? а где fillMode?

ну ты понимаешь, что подобные изобретения - это бред?
кстати, тот факт что нельзя унаследовать/изменить/расширить базовые компоненты QtQuick (тот же QQuickImage) без выкрутасов с приватными хедерами тоже не с лучшей стороны характеризует сабж
+ передать QML компонент в С++ и поработать с ним - тот еще геморрой.

dib2 ★★★★★
()
Ответ на: комментарий от fluorite

справедливости ради, надо отметить, что в 5.5.0 начались поползновения на тему чтения EXIF в QImage, благодаря которым сломали к черту открытие жопегов в половине случаев - https://bugreports.qt.io/browse/QTBUG-46870 и попало это в релиз. Ждем 5.5.1 как манны)

dib2 ★★★★★
()
Ответ на: комментарий от dib2

а где асинхронная загрузка? а с http? а с прогрессом? а где fillMode?

ну это будет подольше 10 минут, часов 5, скажем. Оплатишь?

ну ты понимаешь, что подобные изобретения - это бред?

Нет, не понимаю. Объясни.

кстати, тот факт что нельзя унаследовать/изменить/расширить базовые компоненты QtQuick (тот же QQuickImage) без выкрутасов с приватными хедерами тоже не с лучшей стороны характеризует сабж

Эм, про stable api слышал что-нибудь? Да и где выкрутасы? Пишешь в .pro-файле QT += quick-private, и всё, пользуйся #include <QtQuick/private/qquicksmth_p.h>

передать QML компонент в С++ и поработать с ним

как два байта отослать.

fluorite ★★★★★
()
Ответ на: комментарий от fluorite

ну это будет подольше 10 минут, часов 5, скажем. Оплатишь?

берешь подработки на QML? ;)

Нет, не понимаю. Объясни.

нахрена все это делать, если это должно быть из коробки у уважающего себя фреймворка?

Эм, про stable api слышал что-нибудь?

это который nonsence?)

Да и где выкрутасы? Пишешь в .pro-файле QT += quick-private

да вот и выкрутасы:
Project MESSAGE: This project is using private headers and will therefore be tied to this specific Qt module build version.
Project MESSAGE: Running this project against other versions of the Qt modules may crash at any arbitrary point.
Project MESSAGE: This is not a bug, but a result of using Qt internals. You have been warned!

Для моих дроидных дел пойдет и используется, ибо моя кутя всегда со мной, но для десктопов такой issue не очень радует.

как два байта отослать.

опять-же, только через quick-private или metaobject (если за пределами интерфейса QQuickItem). оно как-бы да, около двух пальцев, но осадочек оставляет.

dib2 ★★★★★
()
Ответ на: комментарий от dib2

берешь подработки

Написал в личку :)

должно быть из коробки

Это цпп, приличные фреймворки обычно проприетарные и живут по конторам, ну или нет.

для десктопов

На виндах обычно тоже всё с собой таскают, на маках это вообще by design. Это только линуксоидам надо по файловой системе всё размазать.

Короче, на джаве писать надо, чо уж. Ну или xamarin вот вроде поспел, все времени нет потрогать.

fluorite ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.