Я строю приложение, которое требует графический интерфейс для процесса расчета.
Расчет в основном представляет собой формулу, написанную пользователем для оценки QScriptEngine — то есть, Javascript.
Дело в том, что мне трудно разбить проблему на более мелкие этапы. Общие цели заключаются в следующем:
background-color
форматирование с тем же цветом, и отображает имя свойства; что-то вроде: <span style='background-color:red;'> propertyName </span>
Интерфейс перетаскивания, а также форматирование закодированы и работают как положено. Но сейчас у меня есть несколько проблем:
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
— но обратите внимание, что фоновый цвет каждого должно быть разным;<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()
результат будет содержать его.
Других решений пока нет …