Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Qt et QML dans AsteroidOS par l'exemple
1. Qt et QML dans AsteroidOS par l'exemple
Par Florent Revest
Le 19 Novembre 2016
2. Qt et QML dans AsteroidOS par l'exemple
Présentation générale de Qt dans AsteroidOS
QPA, Launcher, BTSyncd, Apps, QML-Asteroid
3. Qt et QML dans AsteroidOS par l'exemple
Intégration de Qt dans AsteroidOS
Cross-compilé avec meta-qt5 dans OE
Launcher intégré avec un QPA
Applications et compositor intégrés avec QtWayland
5. Qt et QML dans AsteroidOS par l'exemple
Utilisation de Qt dans AsteroidOS
Launcher
Démons Nemomobile
Démon de synchronisation Bluetooth
Applications
QML-Asteroid
6. Qt et QML dans AsteroidOS par l'exemple
asteroid-launcher
Watchfaces, .desktop, ShaderEffect...
7. Qt et QML dans AsteroidOS par l'exemple
Utilisation de Qt dans asteroid-launcher
asteroid-launcher
Lipstick
QML/qml-asteroid Démons NemoQtWayland
8. Qt et QML dans AsteroidOS par l'exemple
Utilisation de Qt dans asteroid-launcher
Watchfaces:
Loader {
width: desktop.width;
height: desktop.height;
source: watchFaceSource.value
}
ConfigurationValue {
id: watchFaceSource
key: "/desktop/asteroid/watchface"
defaultValue: "file:///usr/share/
asteroid-launcher/watchfaces/000-default-digital.qml"
}
9. Qt et QML dans AsteroidOS par l'exemple
Utilisation de Qt dans asteroid-launcher
Fichiers .desktop
Format standardQColor AppLauncherBackground::centerColor(QString filePath)
{
if(m_centerColors.contains(filePath))
return m_centerColors.value(filePath);
QSettings settings(filePath, QSettings::NativeFormat);
QColor ret(settings.value("Desktop Entry/X-Asteroid-Center-Color",
QColor("#888888")).toString());
m_centerColors.insert(filePath, ret);
return ret;
}
11. Qt et QML dans AsteroidOS par l'exemple
asteroid-btsyncd
API BlueZ GATT DBus, MPRIS, adapteurs QtDBus
12. Qt et QML dans AsteroidOS par l'exemple
Utilisation de Qt dans asteroid-btsyncd
asteroid-btsyncd
BlueZ
Bluetooth Low-Energy
AsteroidOS-Sync
Applications(weather, music, settings etc…)
D-Bus
D-Bus
13. Qt et QML dans AsteroidOS par l'exemple
Utilisation de Qt dans asteroid-btsyncd
Multiplexeur DBus
Characteristic::Characteristic(QDBusConnection bus, ..., QObject *parent) :
QObject(parent), mBus(QDBusConnection::systemBus())
{
bus.registerObject("/char", this, QDBusConnection::ExportAllSlots |
QDBusConnection::ExportAllProperties);
}
class Characteristic : public QObject
{
Q_OBJECT
Q_CLASSINFO("D-Bus Interface", GATT_CHRC_IFACE)
Q_PROPERTY(QDBusObjectPath Service READ getService())
Q_PROPERTY(QString UUID READ getUuid())
Q_PROPERTY(QStringList Flags READ getFlags())
…
14. Qt et QML dans AsteroidOS par l'exemple
Utilisation de Qt dans asteroid-btsyncd
Multiplexeur DBus
class WeatherCityChrc : public Characteristic
{
public:
WeatherCityChrc(QDBusConnection bus, int index, Service *service) :
Characteristic(bus, index, WEAT_CITY_UUID, {"write"}, service) {}
public slots:
void WriteValue(QByteArray value, QVariantMap)
{
const Glib::RefPtr<Gio::Settings> settings =
Gio::Settings::create("org.asteroidos.weather");
settings->set_string("city-name", value.data());
}
};
15. Qt et QML dans AsteroidOS par l'exemple
qml-asteroid
Application, LayerStack, FlatMesh, DeviceInfo...
16. Qt et QML dans AsteroidOS par l'exemple
Utilisation de Qt dans qml-asteroid
Applications(weather, music, settings etc…)
QML
Qml-asteroid
17. Qt et QML dans AsteroidOS par l'exemple
Utilisation de Qt dans qml-asteroid
Application/LayerStack
Flickable {
id: contentArea
anchors.fill: parent
interactive: false
Row { id: content }
}
NumberAnimation {
id: pushAnim
target: contentArea
property: "contentX"
duration: 200
easing.type: Easing.OutQuint
}
18. Qt et QML dans AsteroidOS par l'exemple
Utilisation de Qt dans qml-asteroid
Application/LayerStack
void Application::setOverridesSystemGestures(bool enable)
{
if(m_overridesSystemGestures != enable)
{
m_overridesSystemGestures = enable;
if(enable)
window()->setFlags(window()->flags() |
Qt::WindowOverridesSystemGestures);
else
window()->setFlags(window()->flags() &
~Qt::WindowOverridesSystemGestures);
emit overridesSystemGesturesChanged();
}
}
19. Qt et QML dans AsteroidOS par l'exemple
Utilisation de Qt dans qml-asteroid
DeviceInfo
bool DeviceInfo::hasRoundScreen()
{
#ifdef ROUND_SCREEN
return true;
#else
return false;
#endif
}
20. Qt et QML dans AsteroidOS par l'exemple
Utilisation de Qt dans qml-asteroid
FlatMesh
FlatMesh::FlatMesh(QQuickItem *parent) : QQuickItem(parent)
{
setFlag(ItemHasContents);
}
QSGNode *FlatMesh::updatePaintNode(QSGNode *old, UpdatePaintNodeData *)
{
FlatMeshNode *n = static_cast<FlatMeshNode *>(old);
if (!n)
n = new FlatMeshNode(window(), boundingRect());
return n;
}
21. Qt et QML dans AsteroidOS par l'exemple
Merci … Des questions ?
Site: http://asteroidos.org/
GitHub: AsteroidOS
Twitter: @AsteroidOS
IRC: #asteroid@irc.freenode.net