Qt не рисует узлы на основе реальных координатC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Qt не рисует узлы на основе реальных координат

Сообщение Anonymous »


Я пытаюсь создать приложение Qt на C++, в котором нарисована сеть дорог Люксембурга, но приложение не рисует узлы и арки.

Я успешно прочитал узлы из файла как «id, широта, долгота» и дуги как «fromNodeId, toNodeId, length». Я сохранил это в отдельном классе Map, в котором хранятся вектор узлов и вектор арок. Координаты представляют собой реальные координаты пересечений дорог Люксембурга (узлов). Приложение должно рисовать только арки между узлами (дороги), но по какой-то причине приложение их не рисует. Я думаю, что проблема может быть в нормализации координат, чтобы они поместились внутри окна, но я не совсем уверен.

Это реализация окна:
#include "Tema5.h" Tema5::Tema5(QWidget *родительский) : QMainWindow(родительский) { setFixedSize(1300, 800); ui.setupUi(это); m_map.SetArches(Arch::ReadArchesFromFile("Arches.txt")); m_map.SetNodes(Node::ReadNodesFromFile("Nodes.txt")); ВычислитьМинМаксКоординаты(); обновлять(); } Тема5::~Тема5() {} void Tema5::paintEvent (событие QPaintEvent*) { Q_UNUSED (событие); Художник QPainter(это); Painter.setRenderHint(QPainter::Сглаживание); Преобразование QTransform; QRectF нормализованныйRect(0, 0, ширина(), высота()); Transform.scale(normalizedRect.width()/m_maxLatitude, -normalizedRect.height()/m_maxLongitude); Transform.translate(-m_minLatitude, -m_minLongitude); художник.setTransform(трансформация); художник.setPen(Qt::NoPen); Painter.setBrush(Qt::NoBrush); для (Узел& узел: m_map.GetNodes()) { Точка QPointF(node.GetLatitude(), node.GetLongitude()); Painter.drawEllipse(точка, 0, 0); } Painter.setPen(Qt::black); Painter.setBrush(Qt::black); for (Arch& Arch: m_map.GetArches()) { int fromNodeId = Arch.GetFromNode(); int toNodeId = Arch.GetToNode(); Узел* fromNode = m_map.GetNodeWithId(fromNodeId); Узел* toNode = m_map.GetNodeWithId(toNodeId); QPointF fromPoint(fromNode->GetLatitude(), fromNode->GetLongitude()); QPointF toPoint(toNode->GetLatitude(), toNode->GetLongitude()); Painter.drawLine(fromPoint, toPoint); } } void Tema5::CalculateMinMaxCoordinates() { для (Узел& узел: m_map.GetNodes()) { int широта = node.GetLatitude(); int longitude = node.GetLongitude(); m_maxLongitude = std::max(m_maxLongitude, долгота); m_minLongitude = std::min(m_minLongitude, долгота); m_maxLatitude = std::max(m_maxLatitude, широта); m_minLatitude = std::min(m_minLatitude, широта); } }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»