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();
#endifreturn 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