Вы хотите, чтобы две горизонтальные оси эффективно перекрывали два графика, которые совместно используют ось, или просто чтобы обеспечить дополнительное представление (например, другую единицу) первой горизонтальной оси? Это может быть не так уж важно, я просто пытаюсь понять вашу проблему.
Сначала я бы порекомендовал вам взглянуть на документацию QwtPlot::updateAxes()
. Это лучшее описание, которое я нашел о связи между графиком, механизмами масштабирования и делениями масштаба в официальной документации Qwt. Хотя я не думаю, что Qwt плохо документирован, я думаю, что ему не хватает описания концепций высокого уровня.
QwtScaleDiv. Я вижу больше типа контейнера, содержащего границы осей и, возможно, значения тиков. Я не вижу, что вам необходимо подкласс QwtScaleDiv.
Вы правы, что QwtScaleEngine
участвует в этом преобразовании, но есть немного больше, по крайней мере в Qwt 6.1.0. QwtScaleEngine
поддерживает концепцию преобразования (QwtTransform
) с помощью setTransformation () . Если ваше преобразование представляет собой простую математическую функцию, такую как логарифмическая, экспоненциальная, квадратичная, кубическая и т. Д., Вы можете использовать QwtPowerTransform или QwtLogTransform
. Если это не применимо, вы можете реализовать свой собственный QwtTransform
и присвоить его QwtScaleEngine
. Насколько я знаю, преобразование должно быть двусторонним, то есть реализовывать как transform
, так и invTransform
. По моему опыту, он также должен преобразовывать значения для всех элементов графика, связанных с осью, с которой связан механизм масштабирования, включая линии сетки, зоны и т. Д. Я не пробовал использовать преобразования на других механизмах масштабирования, отличных от значения по умолчанию QwtLinearScaleEngine
, но это отлично сработало. Это мощная концепция. Также взгляните на пример scaleengine на игровой площадке SVN (6.1.0).