+ Répondre à la discussion Actualité déjà publiée
  1. #1
    Responsable Qt


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherches
    Inscrit en
    août 2008
    Messages
    22 416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherches
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 22 416
    Points : 122 618
    Points
    122 618

    Par défaut Des widgets natifs : premiers plans pour Qt 6 ?

    Une API de widgets natifs pour Qt : elle ne devrait arriver qu'avec Qt 6
    et une rationalisation des possibilités pour créer des interfaces

    Un utilisateur préfère très souvent une application qui s’intègre parfaitement à son environnement : des boutons dans le bon ordre, des raccourcis communs… mais aussi une apparence similaire. Évidemment, le plus simple, pour y arriver, est d’utiliser les API spécifiques à chaque plateforme — mais cela complexifie énormément le développement d’une bibliothèque multiplateforme comme Qt. Il vaut mieux alors réimplémenter complètement chaque composant (par exemple, avec OpenGL pour l’affichage) en se rapprochant de l’apparence des composants natifs, y compris pour les animations. Cependant, l’apparence et les animations peuvent changer d’une mise à jour à l’autre : difficile de se tenir à la page.

    Quelques développeurs de Qt commencent donc à explorer l’autre piste : donner accès directement aux composants natifs à travers Qt. L’idée n’est pas neuve (wxWidgets l’implémente, par exemple), mais elle présente toute une série de défis — pas tellement pour les composants les plus simples, mais surtout les plus complexes, comme les onglets — : selon les systèmes, les composants natifs ont plus ou moins de fonctionnalités, une variété difficile à unifier.

    Les développements actuels donnent un prototype d’ensemble de composants, avec une architecture à base d’extensions (une par plateforme). L’API (tant C++ que Qt Quick) est très réduite et fonctionne comme une boîte noire : les fonctionnalités exposées doivent être disponibles sur toutes les plateformes actuellement gérées… et celles du futur. Cette restriction signifie que cette solution n’est pas prévue pour ceux qui souhaitent personnaliser leur interface. À terme, l’objectif est de laisser l’utilisateur accéder directement aux composants natifs pour implémenter les fonctionnalités non disponibles lui-même.

    Par exemple, voici une petite application Qt Quick qui mélange l’API commune (module Qt.CommonControls — le nom n’est pas définitif) et des composants natifs spécifiques à macOS (AppKit, module Qt.AppKitControls) :

    Code qml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    import QtQml 2.0
    import Qt.CommonControls 1.0 as Common
    import Qt.AppKitControls 1.0 as AppKit
     
    Window {
      id: window
      visible: true
     
      Common.Button {
        id: button
        x: 20
        y: 20
        text: "Click me"
        onClicked: text ="You clicked me!"
      }
     
      Common.TextField {
        id: textField
        placeholderText: "TextField"
        x: 20
        y: button.bottom + 8
      }
     
      AppKit.SearchField {
        placeholderText: "Search"
        x: 20
        y: textField.bottom + 8
      }
    }

    La même en C++ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    int main(int argc, char *argv[])
    {
      QGuiApplication app(argc, argv);
      QCommonWindow window;
     
      QCommonButton commonButton(QStringLiteral("Click me"), &window);
      commonButton.move(20, 20);
      QObject::connect(&commonButton, &QCommonButton::clicked, [&commonButton](){
        commonButton.setText(QStringLiteral("Clicked!"));
      });
     
      QCommonTextField textField(&window);
      textField.setPlaceholderText(QStringLiteral("TextField"));
      textField.move(20, commonButton.bottom() + 8);
     
    #if defined(Q_OS_MACOS)
      QAppKitSearchField searchField;
      searchField.setParent(&window);
      searchField.move(20, textField.bottom() + 8);
      NSSearchField *nsSearchField = searchField.nsSearchFieldHandle();
      nsSearchField.placeholderString = @"Search...";
    #endif
     
      window.showFullScreen();
      return app.exec();
    }
    Des mécanismes de type préprocesseur devraient donc se retrouver dans Qt Quick, à un moment ou à un autre, pour gérer le code à utiliser selon la plateforme — exactement comme en C++.

    Ces développements ne devraient pas arriver avant Qt 6. En effet, avec Qt 5, on compte déjà un certain nombre de manières de créer des interfaces graphiques :


    • Qt Widgets ;
    • Qt Quick et ses composants de base (de très bas niveau) ;
    • Qt Quick Controls 1 ;
    • Qt Quick Controls 2.

    La situation est déjà complexe ; ajouter ces composants natifs ne ferait qu’embrouiller largement plus toute personne débutant avec Qt. Les plans sont donc de réduire le nombre d’options : soit Qt Widgets (pour la compatibilité avec les applications existantes), soit Qt Quick Controls 2 (pour l’embarqué et le mobile), soit cette nouvelle voie de composants entièrement natifs (pour les autres besoins).

    Source : Native look and feel.
    Vous souhaitez participer aux rubriques Qt ou PyQt (tutoriels, FAQ, traductions), HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Consultant Ingenierie mécanique
    Inscrit en
    mars 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant Ingenierie mécanique
    Secteur : Transports

    Informations forums :
    Inscription : mars 2006
    Messages : 804
    Points : 1 737
    Points
    1 737

    Par défaut

    si ca peut alleger le core avec qt c'est pas plus mal. j'ai préféré wxwidgets pour cette raison. qt sait faire plien de chose, mais trop de chose et du coup il est tres lourd.

    tout depend du besoin evidemment

  3. #3
    Membre averti
    Homme Profil pro
    Développeur C++
    Inscrit en
    octobre 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur C++

    Informations forums :
    Inscription : octobre 2008
    Messages : 134
    Points : 311
    Points
    311

    Par défaut

    Qt est modulaire, si tu veux juste faire une fenêtre avec des widgets, tu te lie à Qt5Widgets et Qt5Core. C'est pas lourd. Le reste est finement découpé (bluetooth, 3d, web, etc).

  4. #4
    ovh
    ovh est déconnecté
    Rédacteur
    Avatar de ovh
    Homme Profil pro
    Lead developer web full stack
    Inscrit en
    mai 2002
    Messages
    3 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lead developer web full stack

    Informations forums :
    Inscription : mai 2002
    Messages : 3 821
    Points : 6 420
    Points
    6 420

    Par défaut

    Autant utiliser wxWidgets directement non ? Utiliser au maxium les composants natifs est justement leur principe de base. Et comme Qt ils ont d'autres composants non visuels pour le réseau, la base de données etc.

    Tutoriels sur les UPS, e-commerce, PHP, critiques de livres...

    Pensez à consulter les FAQs et les cours et tutoriels.
    FAQ Linux - Cours et tutoriels Linux - FAQ PHP - Cours et tutoriels PHP
    Ce forum est fait pour vous et surtout par vous, merci d'en respecter les règles.

    Je n'ai rien à voir avec la société www.ovh.com !

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    22 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 22 493
    Points : 155 410
    Points
    155 410
    Billets dans le blog
    10

    Par défaut

    Bonjour,

    Je ne suis pas convaincu par cette approche "native". Cela me donne l'impression que je dois construire une couche intermédiaire, entre Qt et mon application, pour refaire l'uniformisation que Qt 5 faisait.
    Alors, oui, ce sera natif et intégré au reste de l'écosystème, mais du coup, ce ne sera que pour les applications non multiplateforme ? J'ai beaucoup de mal à voir l'intérêt.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Responsable Qt


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherches
    Inscrit en
    août 2008
    Messages
    22 416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherches
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 22 416
    Points : 122 618
    Points
    122 618

    Par défaut

    L'intérêt est principalement de proposer des interfaces vraiment natives, utiliser tous les composants natifs de la plateforme, surtout quand ceux-ci n'existent pas vraiment ailleurs (même dans Qt). Par exemple, le composant de recherche textuelle côté macOS (https://developer.apple.com/referenc.../nssearchfield), qui n'a pas vraiment d'équivalent pour Qt (à ma connaissance, du moins).
    Vous souhaitez participer aux rubriques Qt ou PyQt (tutoriels, FAQ, traductions), HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    22 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 22 493
    Points : 155 410
    Points
    155 410
    Billets dans le blog
    10

    Par défaut

    Mais du coup, si je veux une application "look & feel" native et portable, je vais avoir plein de #ifdef pour gérer toutes les plateformes. C'est pour moi, loin du "Code once, deploy anywhere".
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  8. #8
    Expert éminent

    Profil pro
    tutu
    Inscrit en
    juin 2003
    Messages
    5 591
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : juin 2003
    Messages : 5 591
    Points : 9 655
    Points
    9 655
    Billets dans le blog
    3

    Par défaut

    Citation Envoyé par LittleWhite Voir le message
    Je ne suis pas convaincu par cette approche "native". Cela me donne l'impression que je dois construire une couche intermédiaire, entre Qt et mon application, pour refaire l'uniformisation que Qt 5 faisait.
    Qt5 fournit déjà des modules dans le même genre destinés à améliorer l'intégration à une plateforme cible:
    http://doc.qt.io/qt-5/qtwinextras-overview.html

    Portabilité vs fonctionnalités, l'éternel dilemme...

    Citation Envoyé par LittleWhite Voir le message
    Mais du coup, si je veux une application "look & feel" native et portable, je vais avoir plein de #ifdef pour gérer toutes les plateformes.
    Je pense que c'est un code d'exemple. Dans la pratique ça se peut se gérer au niveau du build system (qmake) pour isoler et compiler des fichiers spécifiques à chaque cible.

  9. #9
    Responsable Qt


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherches
    Inscrit en
    août 2008
    Messages
    22 416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherches
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 22 416
    Points : 122 618
    Points
    122 618

    Par défaut

    Citation Envoyé par LittleWhite Voir le message
    Mais du coup, si je veux une application "look & feel" native et portable, je vais avoir plein de #ifdef pour gérer toutes les plateformes. C'est pour moi, loin du "Code once, deploy anywhere".
    Dans tous les cas, si tu veux que l'utilisateur ait l'impression que c'est du natif (à 100 %, au dernier epsilon près), tu devras avoir une implémentation pour chaque plateforme.
    Vous souhaitez participer aux rubriques Qt ou PyQt (tutoriels, FAQ, traductions), HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

Discussions similaires

  1. [PPT-2010] Masque des diapositives au premier plan
    Par vincent311 dans le forum VBA PowerPoint
    Réponses: 2
    Dernier message: 20/01/2012, 10h51
  2. Réponses: 2
    Dernier message: 07/05/2010, 12h42
  3. Mettre un widget au premier plan
    Par doccharly dans le forum GTK+
    Réponses: 3
    Dernier message: 20/07/2009, 14h42
  4. Mettre des fenêtres en premier plan
    Par eliek_9 dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 02/08/2006, 07h08
  5. Réponses: 6
    Dernier message: 14/06/2006, 09h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo