Qt - 创建复杂的"calculator"
Qt - creating a complex "calculator"
我正在构建一个应用程序,该应用程序需要用于计算过程的图形界面。计算基本上是由用户编写的公式,用QScriptEngine(即Javascript)进行评估。
问题是我很难把这个问题分解成更小的步骤。总体目标如下:
- 要在公式中使用的值报告给项的properties。这些项已经创建,并且有一个属性列表,我用它来填充QTableWidget
- 通过从表拖放到QTextEdit,我创建了一个具有丰富格式的字符串,以帮助用户更直观地阅读公式。基本上,表上的每个项目都有特定的颜色,因此在QTextEdit中,当一个项目被删除时,它会获得相同颜色的
background-color
格式,并显示属性的名称;类似于:<span style='background-color:red;'> propertyName </span>
拖放界面以及格式化都按照预期进行了编码和工作。但现在我有几个问题:
- 有些项目具有相同名称的属性。如果我创建的公式有两个不同的属性(来自不同的项),它们具有相同的名称,我就无法无歧义地向后跟踪属性的值——我想到的是字符串比较/string用其值替换属性的名称,然后用
evaluate()
计算
我一直在思考如何绕过这一点,我想创建一个QMultiMap
来保持item: [property, value]
关系,然后替换将要评估的字符串。但是,我需要再次检查表格中的财产来自哪个项目,我不知道该怎么做。
我是Qt/C++的新手,我知道我的大多数代码都有一些大的错误做法,而且它更多地是以黑客的方式来实现我所需要的目标,而不是构建一个好的结构,所以每个新问题每次都会得到更复杂的解决方案。
即便如此,你建议我如何解决这个问题此时,我认为最好不要发布我的代码,因为它太长了(可能很痛苦)。如果有人需要特定的部分来更好地理解问题的上下文,请告诉我,我会在这里发布。
此外,当我开始思考这个问题时,我在SO中还有其他问题——可能对检查上下文有用:这里。
更新:
回复@Riateche的评论:
想象一下这个场景:
Item A : [property1, value1]
[property2, value2]
Item B : [property1, value3]
[property2, value4]
现在,假设用户想要执行ItemA.property1 * ItemB.property1
:
- 我想让他看到
property1
*property1
,但请注意,每个的背景颜色应该不同 - 我可以在QTextEdit中放置类似的内容:
<span style='background-color:red;'> property1 </span> * <span style='background-color:blue;'> property1 </span>
- 我实际想要评估(计算)的是:
value1
*value3
-其中这些表示双类型
更新2
经过思考,虽然@Riateche的方法看起来很简单,但我没能找到改变标签属性的方法(至少在富文本中,也许QWebkit有一个,但这不是我需要的)。所以我在想,如果构建另一个字符串(将被评估),同时用户通过拖放来构建一个字符串。例如,让我们想象一下用户拖放一些东西,比如:
property1
*property1
同时,我会构建包含的其他字符串
value1
*value3
这将是被求值的字符串。即便如此,用户编辑字符串的问题仍然存在-如果用户更改拖放字符串,我需要再次更新评估字符串-需要我再次检查数据的来源。还有其他想法吗?
您应该将公式评估的所有重要信息放到文本编辑中。您可以使其对用户不可见。例如,您可以将以下内容放到文本编辑中:
<span style='background-color:red;'><a name='Item A,property1'></a>property1</span>
Item A,property1
文本对用户来说是不可见的,但textEdit->toHtml()
结果将包含它。
- 函数复杂度分析
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 函数的时间复杂度是多少?
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 使用 Python Extension API 包装复杂C++类
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 如何计算此排序函数的时间复杂度?
- 计算两个代码块的时间复杂度
- 将平面阵列重塑为复杂的特征类型
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- 当 A 在 for 循环中调用函数 B 时,如何计算函数 A 的空间复杂度?
- 如何在复杂继承中访问静态成员变量
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- OpenCV 傅里叶变换复杂输出问题
- 具有嵌套 if-else 的循环的时间复杂度
- 在 for 循环中处理复杂的发送 recv 消息
- C++:如何用单个命令替换复杂的迭代?
- Qt - 创建复杂的"calculator"