2015-04-07 3 views
1

Я использую libqwt-6.1.1 для отображения переменных данных в элементе QwtPlot (как гистограмма) с использованием автоматической шкалы для оси y. В зависимости от фактических данных и количества тиков автомасштабирование считается разумным, минимальная высота всего элемента QwtPlot часто увеличивается. Это убивает весь мой дизайн макета и часто делает окно больше, чем экран.QwtPlot автоматически изменяет размер во время AutoScale

Сейчас 2 вопроса:

1) Как я могу предотвратить QwtPlot от автоматического увеличена?

2) Как работает расчет минимального размера? (Я потерялся где-то в QwtPlotLayout :: activate(), пытаясь выполнить шаги вычисления.)

ответ

1

Наконец, решение было проще, чем ожидалось ...

Перегрузки QwtPlot::sizeHint() и QwtPlot::minimumSizeHint() (которые являются виртуальными, к счастью), что делает и возвращать небольшое постоянное значение сделал трюк, т.е.

QSize myPlot::sizeHint() const { return QSize(100, 100); }

QSize myPlot::minimumSizeHint() const { return QSize(100, 100); }

0

Фактор, который влияет на высоту и зависит от автоматического масштабирования, - это количество основных тиков вертикальных масштабов (tickcount * font height).

Расчет тиков зависит от данного шага. Если для параметра stepSize установлено значение 0 (= значение по умолчанию), оно вычисляется из параметра maxMajor (по умолчанию: 8), что является верхним пределом для числа основных тиков.

Так что f.e. вы можете использовать stepSize для 0 и установить разумную настройку maxMajor для вашего варианта использования. Затем используйте настройку QLayout, где график не всегда сжимается до минимальной высоты.

+0

спасибо за ваше предложение, это фактически не решило проблему, но вернуло мое исследование обратно в правильное направление (см. Sol ниже). –