我正在构建一个需要图形界面进行计算过程的应用程序。 计算基本上是由用户编写的用QScriptEngine评估的公式 - 即Javascript。
问题是我无法将问题分解为更小的步骤。总体目标如下:
background-color
格式,并显示该属性的名称;例如:<span style='background-color:red;'> propertyName </span>
拖放界面以及格式化编码并按预期工作。但现在我有一些问题:
evaluate()
计算。我一直在试图解决这个问题,我想创建一个QMultiMap
以保持item: [property, value]
关系,然后替换将要评估的字符串。但同样,我需要检查表单属性来自哪个项目,我不知道如何做到这一点。
我是Qt / C ++的新手,我知道我的大部分代码都有一些大错误的做法,并且通过 hacking 的方式完成了我所需的目标,不仅仅是建立一个良好的结构 - 每一个新问题每次都会得到一个更复杂的解决方案。
即便如此,您如何建议我应该解决这个问题?此时我认为最好不要发布我的代码,因为它太长(并且可能很痛苦)看着。如果有人需要特定部分来更好地理解问题的背景,请告诉我,我会在这里发布。
此外,当我开始考虑这个问题时,我还有其他问题 - 检查上下文可能有用:here。
更新
回复@ Riateche的评论:
想象一下这种情况:
Item A : [property1, value1]
[property2, value2]
Item B : [property1, value3]
[property2, value4]
现在,想象一下用户想要执行ItemA.property1 * ItemB.property1
:
property1
* property1
- 但请注意每个背景颜色应该不同; <span style='background-color:red;'> property1 </span> * <span style='background-color:blue;'> property1 </span>
value1
* value3
- 其中这些代表 double 类型。更新2
在考虑了一点之后,虽然@ Riateche的方法看起来很简单,但是我无法找到改变标签属性的方法(至少在富文本中,也许有一个用QWebkit,但那不是什么我需要)。所以我在考虑是否构建另一个字符串(将被评估),同时用户使用拖放来构建字符串。例如,让我们假设用户拖拽和删除类似:
property1
* property1
同时我会构建包含
的其他字符串 value1
* value3
这将是评估的字符串。即便如此,用户编辑字符串的问题仍然存在 - 如果用户更改了拖放字符串,我需要再次更新评估字符串我再次检查数据的来源。还有其他想法吗?
答案 0 :(得分:2)
您应该将对公式评估重要的所有信息都放到文本编辑中。您可以让它对用户不可见。例如,您可以将以下内容添加到文本编辑中:
<span style='background-color:red;'><a name='Item A,property1'></a>property1</span>
Item A,property1
文字对用户不可见,但textEdit->toHtml()
结果将包含该文字。