How to perform addition in qml by calling .cpp function?



  • I am having a .qml file which contains four buttons as: first button with text: "3", second button with "5", third with the operator symbol "+" and the fourth button with "=" .... Now what i need is when i clicked on first/second button it must store the value int a variable and when clicked on "+",i had created a function that should be calling from qml to cpp file,where it should perform the addition operation. Then,the value must be passed again to the qml and display it in a textarea.when pressed the = button.

    Here is how i have tried on this:

    .qml file

    @
    property string i;
    property string c;

    Button {
    id: button1
    x: 203
    y: 258
    text: "5"

            onClicked: {
    
                    i = text
                    t.text = t.text + i
    
            }
        }
    

    Button {
    id: button2
    x: 203
    y: 258
    text: "3"

            onClicked: {
    
                    i = text
                    t.text = t.text + i
    
            }
        }
    

    Button {
    id: buttonplus
    x: 136
    y: 320
    text: "+"

    onClicked: {
    StringHelper.apple()

    }
    }

    Button {
    id: equal
    x: 195
    y: 320
    width: 116
    height: 42
    text: "="

            onClicked: {
    
    
              t.text = c
    
            }
        }
    

    TextField {
    id: t
    x: 81
    y: 60
    width: 225
    height: 50
    text: ""
    maximumLength: 32765

    }
    @

    stringhelper.h

    @
    #ifndef STRINGHELPER_H
    #define STRINGHELPER_H
    #include<QObject>

    class StringHelper : public QObject
    {
    Q_OBJECT
    public slots:
    Q_INVOKABLE int apple(int x,int y)

        {
    

    int c = x + y;

    ????????????????????????
    }
    @

    main.cpp:

    @
    #include <QApplication>
    #include <QDeclarativeView>
    #include <QDeclarativeContext>
    #include "stringhelper.h"

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

    StringHelper stringHelper;
    
    QDeclarativeView view;
    view.setResizeMode(QDeclarativeView::SizeRootObjectToView);
    view.rootContext()->setContextProperty("StringHelper", &stringHelper);
    view.setSource(QUrl("qml/main.qml"));
    

    #if defined(Q_WS_S60) || defined(Q_WS_MAEMO)
    view.showMaximized();
    #else
    view.setGeometry(100, 100, 800, 480);
    view.show();
    #endif

    return a.exec;
    

    }
    @

    So, Kindly help in finding out!!!

    Thanks and Regards

    [EDIT: code formatting, please wrap in @-tags, Volker]



  • Just return the value in <code>int apple(int x, int y) { ... return c;}</code> and pass it to the desired variable or item in QML <code>onClicked: { t.text = StringHelper.apple(button1.text, button2.text) }</code>.

    Is there any particular reason you are performing the addition in C++? QML event handlers take any kind of JavaScript code, including mathematical expressions.

    As to the your post: Your code formatting is seriously broken. Wrap code in @ tags so its gets formatted properly. Even your non-code part is seriously broken due to the hypens. Either use the preview function or the edit function to make sure your post is actually readable next time.



  • Thank you for your reply Sir....

    I tried what you have said sir but it shows -> Error: Insufficient arguments

    I have changed my coding as:

    onClicked: {

                t.text = StringHelper.apple();
    

    and also as:

    onClicked: {

                t.text = StringHelper.apple(c);
    
            }
    
            }
    

    I am trying to add calculator in my app sir thats why i am in need of it and i am not using Javascript code.

    any comments.....



  • You will have, of course, pass <code>button1.text</code> and <code>button2.text</code> to <code>StringHelper::apple(int a, int b)</code>.
    @
    onClicked: {
    t.text = StringHelper.apple(button1.text, button2.text);
    }
    @



  • Thank You for your answer....

    You are really great sir i was trying this for the past 2 days and you are the one who had come out with the solution...

    Thank you again Sir....:)
    :)

    Sir suppose if i am having 0-9 buttons and in this case if i need to perform addition operation how could i declare the result function....

    onClicked: {

                t.text = StringHelper.apple(????????????????);
    
            }
    

    Thanks,
    Harish


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.