Цитата |
---|
Oleg Belenkov написал: Если размер фоновой области (клиентской области) окна, например, 800 на 600,то значение правой нижней точки RECT ставим 800 и 600, а не размер изображения карты. |
Значит изначально я правильно менял эти параметры.....
Не получается это сделать в данном примере mapinfo в методе void MapWidget::DrawMap(QPainter* p, int cx, int cy, int cw, int ch).
Окно у меня в вашем тестовом примере зафиксировано 600*600 пикселов.
При масштабе до 1:1000000 данные cw и ch передаются в метод 580,580 из-за скролинга, так как карта больше моего окна.
Когда карта меньше окна отображения, начиная с масштаба 1:1000000 и далее cw и ch уменьшается и я не могу его установить 600*600.
Подскажите как это сделать. Не могу разобраться.
Попробуйте сделать в этом примере.
Метод void MapWidget::paintEvent(QPaintEvent *event)
Скрытый текст |
---|
// ----------------------------------------------------------------------------- // Событие перерисовки // ----------------------------------------------------------------------------- void MapWidget::paintEvent(QPaintEvent *event) { //qDebug() << "paintEvent"; if (MapHandle != 0) { int x = event->rect().left(); int y = event->rect().top(); int width= event->rect().right() - event->rect().left() + 1; int height = event->rect().bottom() - event->rect().top() + 1; if (CheckMemoryNeeded(width, height)) { WidthBM = width; HeightBM = height; qDebug() << "WidthBM"<<WidthBM; qDebug() << "HeightBM"<<HeightBM; }
QPainter p; p.begin(this); DrawMap(&p, x, y, width, height); p.end(); } } |
Методы этого класса, а именно:
event->rect().right()
и
event->rect().bottom()
возвращают значение меньше габаритов моего окна, когда масштаб карты меньше этого окна.
Соответственно и синяя область рисуется не во все окно.
Так как я ранее не был связан с графикой я не могу пока понять как это исправить, а именно что бы значения менее чем 600*600 не возвращалось.