Перемещение графических элементов при изменении размера окна

Хорошо, я в основном случайным образом размещаю графические элементы на графической сцене. Я открываю окно и показываю эти предметы. Когда я изменяю размер окна, я хочу, чтобы эти элементы оставались того же размера, но перемещались пропорционально размеру окна. Как я это сделал, я создал подкласс графического представления, а затем, когда произошло событие изменения размера, он отправил объект изменения размера моему объекту GraphicsScene. Затем я смог сделать что-то вроде этого:

double scaleX = double(event->size().width())/double(event->oldSize().width());
double scaleY = double(event->size().height())/double(event->oldSize().height());

Затем я использовал эти значения, чтобы сделать это:

derivedPointItem->setPos( derivedPointItem->pos().x() * scaleX,
                          derivedPointItem->pos().y() * scaleY );

Это работает нормально, но это не совсем правильно, если я изменяю размер окна очень маленьким или большим. Я думаю, проблема в том, что прямоугольник графической сцены и прямоугольник графического представления не совпадают или что-то в этом роде. Кроме того, у меня есть фон, размер которого изменяется до размера окна:

void roiwindow::drawBackground( QPainter* painter, const QRectF& rect )
{
    this->setSceneRect(0,0,rect.width(),rect.height());
    painter->save();
    painter->drawImage(rect, *refimage);
    painter->restore();
}

Это то, что мне нужно в программе, которую я пишу. Кроме того, это позволяет мне увидеть, работает ли изменение размера. В основном я могу установить фон как многоугольник, а затем разместить точки на краях многоугольника. Когда я изменяю размер изображения, делая его очень большим или маленьким, точки больше не находятся в вершинах многоугольника, хотя они несколько близки. Кто-нибудь знает лучший способ сделать это или способ исправить это? Спасибо.

РЕДАКТИРОВАТЬ: Вот проект, над которым я работаю:

dropbox.com/s/myxi8kvdl7x9ye2/ncorr.tar.gz


person Justin    schedule 07.06.2012    source источник
comment
Вот проект, над которым я работаю: dropbox.com/s/myxi8kvdl7x9ye2/ncorr .tar.gz Кроме того, я хотел сказать, что нужно изменить их положение пропорционально размеру окна. Но размер самих предметов останется прежним. Надеюсь, это прояснит ситуацию. Спасибо. Кроме того, чтобы использовать программу, просто загрузите ссылку на файл, а затем нажмите «Установить область назначения». Измените размер окна, и вы поймете, что я имею в виду.   -  person Justin    schedule 07.06.2012
comment
Еще кое-что. Я в основном просто пытаюсь воссоздать impoly из Matlab. Кроме того, я делал это на Ubuntu, надеюсь, это работает на любой системе, которую вы используете... Дерьмо, еще одна вещь. Чтобы закрыть рои, просто щелкните правой кнопкой мыши.   -  person Justin    schedule 07.06.2012


Ответы (1)


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

person Justin    schedule 07.06.2012