CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

connection c++/qml

malcom976
malcom976
Niveau 10
13 juin 2014 à 21:46:31

:salut:
voila j'ai un projet que j'ai commencer depuis longtemps
une application sur Android et desktop (Windows,Linux) coder avec qt5
en Qml, javascript et C++
j'ai finie l'interface en qml et javascript (tester sur Android et Linux)
et la je viens de finir le moteur de l'appli en c++

tout marche très bien sauf que je ne sais pas comment relier l'interface qml avec le cœur de l'appli en c++ (ce qui est normalement facile a faire :noel: )

j'ai passer des heures sur la docu officiel + tuto sur le net et j'arrive toujours pas a le faire

quelqu'un peux m'aider a comprendre ? :cute:

Pour comprendre j'aimerais qu'on m'explique comment relier ça :

j'ai une interface Basic qml :

https://image.noelshack.com/fichiers/2014/24/1402686825-qml.png

voila le code qml :d)

import QtQuick 1.1

Rectangle {
width: 400
height: 200

Text {
id: resultats
x: 122
y: 44
width: 140
height: 18
text: qsTr("resultats")
font.pixelSize: 12
}

Rectangle {
id: boutton
x: 285
y: 137
width: 45
height: 40
color: "#ac0505"

MouseArea {
id: mouseArea1
anchors.rightMargin: 0
anchors.bottomMargin: 0
anchors.leftMargin: 0
anchors.topMargin: 0
anchors.fill: parent
}
}

TextInput {
id: inputA
x: 30
y: 147
width: 80
height: 20
text: qsTr("Text Input A")
font.pixelSize: 12
}

TextInput {
id: inputB
x: 160
y: 147
width: 80
height: 20
text: qsTr("Text Input B")
font.pixelSize: 12
}
}
:g)

j'aimerais relier cette interface a se code c++ :

:d)

#include"calcules.h"

void ClProces::lancerCalculs()
{
Resultats = A+B;
}

ClProces::~ClProces()
{
}

:g)

le header :

:d)

  1. ifndef CALCULES_H
  2. define CALCULES_H

namespace Cl {
class ClProces;
}
class ClProces : public QObject
{
Q_OBJECT

public:
ClProces();
~ClProces();

private slots:
void lancerCalculs();

private:
QString Resultats;
int A;B;

};

  1. endif // CALCULES_H

:g)

En gros pour ce qui comprennent pas le code ( :ouch: )

je veux que quand l'utilisateur mais un chiffre dans «input A » et « input B » et qu'il appuis sur le carre rouge « MousseArea1 » le qml appel la fonction « lancerCalculs » , envois les chiffres dans leur variables « A et B » , la fonction fait la sommes des deux et renvois le résultats et le qml l’affiche dans résultats

:merci:

malcom976
malcom976
Niveau 10
14 juin 2014 à 19:25:13

i need you'r help :svp:

Pseudo supprimé
Pseudo supprimé 15 juin 2014 à 19:03:50

Hello,

Dans l'idéal,le lien entre QML et C++ est réalisé à l'aide de la fonction qmlRegisterType :ok:

Deux tutos (en anglais) mais ce sont les plus complets que j'ai trouvé :

http://www.ics.com/blog/integrating-c-qml
http://www.ics.com/blog/multilayered-architecture-qt-quick

Le 2ème n'utilise pas d'appel à qmlRegisterType mais c'est à mon avis une mauvaise solution si on veut vraiment séparer GUI (QML) et logique (C++) du soft.

malcom976
malcom976
Niveau 10
16 juin 2014 à 14:13:07

ok merci je vais tester, , je poste le résultat si je réussis :fou:

malcom976
malcom976
Niveau 10
05 juillet 2014 à 21:47:51

bon j'ai pas reussi :fou:

j'ai codé ça (Qt5.3):

:d) pro :

SOURCES += \
main.cpp maclass.cpp

QT+= widgets quickwidgets quick

HEADERS += \
maclass.h

OTHER_FILES += \
qmlTest.qml

:d) Header :

  1. ifndef MACLASS_H
  2. define MACLASS_H
  3. include <QObject>

class maclass : public QObject
{
Q_OBJECT
public:
explicit maclass(QObject *parent = 0);

signals:

public slots:
void mafonction();

};

  1. endif // MACLASS_H

:d) Main :

  1. include <QApplication>
  2. include <QQuickView>
  3. include <QQuickItem>
  4. include "maclass.h"

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

QQuickView view;
view.setSource(QUrl::fromLocalFile("qmlTest.qml"))
;

view.show();
QObject *object = view.rootObject();

return app.exec();
}

:d) Qml :

import QtQuick 2.2

Rectangle {
signal monSignal;
id: font

width: 360
height: 360
color: "#c957e5"

MouseArea {
anchors.fill: parent
onClicked: {
monSignal();
}
}

Text {
id: monTexte
anchors.centerIn: parent
text: "salut toi"
font.italic: true
font.bold: true
font.pointSize: 17
}
}

:d) Sources :

  1. include "maclass.h"

maclass::maclass(QObject *parent) :
QObject(parent)
{
QObject::connect(Object, SIGNAL(monSignal()),this, SLOT(mafonction()));
}

void maclass::mafonction()

{

}

:g)

j'ai une erreur sur :

maclass::maclass(QObject *parent) :
QObject(parent)
{
:d) QObject::connect(Object, SIGNAL(monSignal()),this, SLOT(mafonction()));
}

:cd: erreur : 'Object' was not declared in this scope

j'ai compris l'erreur mais je ne sais pas comment la corrigé :-((

malcom976
malcom976
Niveau 10
07 juillet 2014 à 01:33:11

personnes sais comment en appel une fonction c++ a partir d'un qml sur qt5 ?
j'aimerais juste qu'on m'explique avec un code simple et commentées

je trouve plusieurs versions complètement différentes a chaque fois que je fais une recherche,

se que j'ai compris c'est qu'il faut lire en permanence le rootObject du view avec un dynamique cast et le connecter a ma fonction avec un QObject::connect(rootObject , signal (monSignal ()), maclass, slot (monSlot ());
mais jusqu'à maintenant j'ai pas réussi a le faire :hap:

malcom976
malcom976
Niveau 10
27 juillet 2014 à 17:53:44

j'ai fini par trouver la bonne methode
:d) http://developer.nokia.com/community/wiki/Connecting_Qt_signal_to_QML_function

c'est un tuto pour Qt4 mais il suffit de changer les noms des class maitre leur équivalent Qt5 et ça marche nikel :ok:

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment