[Qt-interest] Implementing a dynamic expression at runtime

Donal donaloconnor at gmail.com
Thu Mar 5 17:57:32 CET 2009


Yep am going to look into that. Sounds perfect.

Cheers Alan,

Regards,
Donal

On Thu, Mar 5, 2009 at 4:50 PM, Alan M. Carroll <amc at network-geographics.com
> wrote:

>  Have you looked at this[1]? You can make the sensor objects directly
> available in script, along with member variables. That means QScript can do
> the name look up for you.
>
> [1]
> http://doc.trolltech.com/4.3/qtscript.html#making-a-qobject-available-to-the-script-engine
>
> At 09:23 AM 3/5/2009, you wrote:
>
> Thanks, that looks quite interesting too.
>
> However I have messed with QtScript there for a while and it seems that it
> will have no problem doing the trick for me.
>
> I done just a little proof of concept:
>
> QScriptEngine engine;
>
> int fooVal = 0;
>
> float fooBarVal = 4.3;
>
> char fooName[] = "foo";
>
> char fooBarName[] = "foobar";
>
> QScriptValue val(&engine, fooVal);
>
> engine.globalObject().setProperty(fooName, val);
>
> QScriptValue val2(&engine, fooBarVal);
>
> engine.globalObject().setProperty(fooBarName, val2);
>
> qDebug() << "foo times two is:" << engine.evaluate("(foo<4) &&
> (foobar<4.4)").toNumber();
>
>
> And it does the trick perfect! :) - outputs a 1 for true and 0 for false.
>
> All I have to do now is store the name of the var as "0102" and do a lookup
> in my QList of sensors for a match and use it to get the result. I will also
> look at integrating directly with the QObjects as this probably be a nicer
> way to do it.
>
> Cheers for the suggestions guys.
>
>
> Regards,
> Donal
>
> On Thu, Mar 5, 2009 at 2:13 PM, Alan M. Carroll <amc at network-geographics.com>
> wrote:
>  You might find the Spirit Parser Generator interesting for this project.
>
>  http://spirit.sourceforge.net/
>
> Writing an expression evaluator should be simple give the limited domain.
> Note that you can name your QObjects and then use findChild() to locate a
> specific object by name.
>
> At 07:15 AM 3/5/2009, Donal wrote:
> >Hi There,
> >
> >I want to enable a user to choose rules dynamically, for example if the
> Coolant Temperature and Engine RPM
> >are monitored in real time (4 samples a second), I want to allow the user
> to say produce an alert
> >when for example, "If coolantTemp < 40 AND engineRPM > 4500" alert the
> user with a dialog message.
> >
> >So I am wondering which is the best way to implement such dynamic logic.
> As far as I know C++ doesn't allow you to evaluate
> >dynamic code at run time.
> >I have looked at QtScript and it seems to be able to interact with objects
> of QObject derived type.
> >
> >My idea is to construct a string such as "If 010C < 40 AND 010D > 60",
> where the 01n are the identifiers for the sensors.
> >Then parse this string and construct some qscript logic from it to
> evaluate to true or false.
> >Reason I'd like to store as QString is to allow the storing of rules to a
> file.
>
> _______________________________________________
> Qt-interest mailing list
>  Qt-interest at trolltech.com
>  http://lists.trolltech.com/mailman/listinfo/qt-interest
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20090305/a1079fb5/attachment.html 


More information about the Qt-interest-old mailing list