Использование соответствующего кода для имитации калькулятора с помощью программы визуального потока данных (https://github.com/paceholder/nodeeditor), Я делаю узлы чуть большего размера, чем те, которые используются в коде, устанавливая их размер вручную. Однако при увеличении масштабав QGraphicsView (называемом FlowView) с колесом мыши, код использует функцию QGraphicsView :: scale () для преобразования в новую матрицу для расширенного просмотра и просто не показывает части узлов, как на следующих рисунках:
Соединение с узлом увеличено
Соединение с узлом увеличено
Вотчасть кода, которую я изменил в NodeGeometry.cpp, чтобы изменить размер узлов:
void
NodeGeometry::
recalculateSize() const
{
// _entryHeight = _fontMetrics.height();
// {
// unsigned int maxNumOfEntries = std::max(_nSinks, _nSources);
// unsigned int step = _entryHeight + _spacing;
// _height = step * maxNumOfEntries;
// }
// if (auto w = _dataModel->embeddedWidget())
// {
// _height = std::max(_height, static_cast<unsigned>(w->height()));
// }
// _height += captionHeight();
// _inputPortWidth = portWidth(PortType::In);
// _outputPortWidth = portWidth(PortType::Out);
// _width = _inputPortWidth +
// _outputPortWidth +
// 2 * _spacing;
// if (auto w = _dataModel->embeddedWidget())
// {
// _width += w->width();
// }
// _width = std::max(_width, captionWidth());
// if (_dataModel->validationState() != NodeValidationState::Valid)
// {
// _width = std::max(_width, validationWidth());
// _height += validationHeight() + _spacing;
// }
//Size Tests
_height = 600;
_width = 1000;
}
Как я могу изменить этот код, чтобы быть уверенным, что объекты не будут обрезаны?
Вещи, которые я заметил:
Размер окна изменяет, насколько сильно обрезается узел, так же, как и увеличение.
Перемещение узла выиграноt изменить, сколько или где оно стерто;
Это происходит справа налево и снизу к верхней части узла;
Больше зума = больше этого нет.
Я считаю, что ключевыми файлами являются FlowView.cpp, FlowScene.cpp, NodePainter.cpp, NodeGraphicsObject.cpp, но я не знаю, какдля продолжения.
Кроме того, мне нужно, чтобы узлы были такого размера, так как я пытаюсь использовать в нем холст графика из qwt, и он имеет минимальную высоту.