Discussion:
c++ and qt
(too old to reply)
bubu
2024-01-16 21:29:00 UTC
Permalink
Hi,

Sorry for my bad english and sorry for my bad level in qt.

I would like to use a qml program and c++ libraries (with import).

I use Visual Studio on windows.
I want to use QT5 (not qt5)

I have several problems (and I put an example here-after) :
- how to use c++ with qml
- how to use a library written in c++ to use in a program in QML with
IMPORT statement.
- how to build executable and librarie with cmake?

My example is here :

main.qml

import QtQuick 2.15
import QtQuick.Controls 2.15
// import calculator ? ? ? how ?


ApplicationWindow {
visible: true
width: 400
height: 300
title: "Calculator"

Calculatrice {
id: calculatrice
}

Column {
anchors.centerIn: parent
spacing: 10

TextField {
id: input1
placeholderText: "Entrez le premier nombre"
validator: DoubleValidator {
bottom: -1000000000.0
top: 1000000000.0
}
}

TextField {
id: input2
placeholderText: "Entrez le deuxième nombre"
validator: DoubleValidator {
bottom: -1000000000.0
top: 1000000000.0
}
}

Row {
spacing: 10

Button {
text: "Additionner"
onClicked: {
resultLabel.text = "Résultat: " +
calculator.add(parseFloat(input1.text), parseFloat(input2.text))
}
}

Button {
text: "Soustraire"
onClicked: {
resultLabel.text = "Résultat: " +
calculator.subtract(parseFloat(input1.text), parseFloat(input2.text))
}
}

Button {
text: "Multiplier"
onClicked: {
resultLabel.text = "Résultat: " +
calculator.multiply(parseFloat(input1.text), parseFloat(input2.text))
}
}
}

Label {
id: resultLabel
text: "Résultat: "
}
}
}




main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QtCore>

#include "calculator.cpp"

int main(int argc, char* argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;

qmlRegisterType<Calculator>("Calculator", 1, 0, "Calculator");

QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
&app, [url](QObject* obj, const QUrl& objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
engine.load(url);

return app.exec();}



calculator.h


// calculator.h
#ifndef CALCULATOR_H
#define CALCULATOR_H

class Calculator {
public:
double add(double a, double b) const;
double subtract(double a, double b) const;
double multiply(double a, double b) const;
};

#endif // CALCULATOR_H


calculator.cpp

#include <QObject>

class Calculator : public QObject
{
Q_OBJECT

public:
Q_INVOKABLE double add(double a, double b) const {
return a + b;
}

Q_INVOKABLE double subtract(double a, double b) const {
return a - b;
}

Q_INVOKABLE double multiply(double a, double b) const {
return a * b;
}
};



Could you help me, please.
It make errors on building. Why ?
How to build library for qml (using IMPORT) and executable with cmake ?

Sorry. I have a lot of problems. I will have others questions after.

Thanks a lot.
wij
2024-01-20 22:22:28 UTC
Permalink
Post by bubu
Hi,
Sorry for my bad english and sorry for my bad level in qt.
I would like to use a qml program and c++ libraries (with import).
I use Visual Studio on windows.
I want to use QT5 (not qt5)
- how to use c++ with qml
- how to use a library written in c++ to use in a program in QML with
IMPORT statement.
- how to build executable and librarie with cmake?
main.qml
import QtQuick 2.15
import QtQuick.Controls 2.15
// import calculator ? ? ? how ?
ApplicationWindow {
    visible: true
    width: 400
    height: 300
    title: "Calculator"
    Calculatrice {
        id: calculatrice
    }
    Column {
        anchors.centerIn: parent
        spacing: 10
        TextField {
            id: input1
            placeholderText: "Entrez le premier nombre"
            validator: DoubleValidator {
                bottom: -1000000000.0
                top: 1000000000.0
            }
        }
        TextField {
            id: input2
            placeholderText: "Entrez le deuxième nombre"
            validator: DoubleValidator {
                bottom: -1000000000.0
                top: 1000000000.0
            }
        }
        Row {
            spacing: 10
            Button {
                text: "Additionner"
                onClicked: {
                    resultLabel.text = "Résultat: " +
calculator.add(parseFloat(input1.text), parseFloat(input2.text))
                }
            }
            Button {
                text: "Soustraire"
                onClicked: {
                    resultLabel.text = "Résultat: " +
calculator.subtract(parseFloat(input1.text), parseFloat(input2.text))
                }
            }
            Button {
                text: "Multiplier"
                onClicked: {
                    resultLabel.text = "Résultat: " +
calculator.multiply(parseFloat(input1.text), parseFloat(input2.text))
                }
            }
        }
        Label {
            id: resultLabel
            text: "Résultat: "
        }
    }
}
main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QtCore>
#include "calculator.cpp"
int main(int argc, char* argv[])
{
  QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);   
  QGuiApplication app(argc, argv);   
  QQmlApplicationEngine engine;    
  
  qmlRegisterType<Calculator>("Calculator", 1, 0, "Calculator");
  
  QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
    &app, [url](QObject* obj, const QUrl& objUrl) {
        if (!obj && url == objUrl)
            QCoreApplication::exit(-1);
    }, Qt::QueuedConnection);
  engine.load(url);   
  return app.exec();}
calculator.h
// calculator.h
#ifndef CALCULATOR_H
#define CALCULATOR_H
class Calculator {
   double add(double a, double b) const;
   double subtract(double a, double b) const;
   double multiply(double a, double b) const;
};
#endif // CALCULATOR_H
calculator.cpp
#include <QObject>
class Calculator : public QObject
{   
   Q_OBJECT
public:   
   Q_INVOKABLE double add(double a, double b) const {       
       return a + b;   
   }   
   Q_INVOKABLE double subtract(double a, double b) const {
       return a - b;   
   }   
   Q_INVOKABLE double multiply(double a, double b) const {
       return a * b;   
   }
};
Could you help me, please.
It make errors on building. Why ?
How to build library for qml (using IMPORT) and executable with cmake ?
Sorry. I have a lot of problems. I will have others questions after.
Thanks a lot.
Check out this site. They are willingly to answer questions about Qt.
tt

Loading...