Название: Динамическое изменение размера виджета и перенос начала координат. Отправлено: PunisherPCK от Январь 17, 2014, 17:30 Здравствуйте.
Проблема состоит в следующем: Размер виджета определяется как:this->setMinimumSize(qApp->desktop()->height(), qApp->desktop()->width()) Начало координат соответственно в точке (0, 0). Затем на виджете рисуется какой-нибудь графический объект. Существует вероятность, что он выйдет за пределы виджета. Как динамически изменять размер виджета я понял. Но как перенести систему координат с точки (0, 0) на пример в точку ( 0, -100). Как раз в этой невидимой части и находится часть моего объекта. Заранее спасибо. Название: Re: Динамическое изменение размера виджета и перенос начала координат. Отправлено: gil9red от Январь 17, 2014, 17:46 Но как перенести систему координат с точки (0, 0) на пример в точку ( 0, -100). Рисуете через QPainter, да? Тогда используется метод translate Пример: http://qtdocs.narod.ru/4.1.0/doc/html/qpainter.html Код
Название: Re: Динамическое изменение размера виджета и перенос начала координат. Отправлено: PunisherPCK от Январь 19, 2014, 22:20 Таким образом переносится только система координат. Как тогда сделать, чтобы и видимая часть виджета начиналась с него? Тем способом, что пытался я, размер виджета изменяется, но только относительно начала координат по умолчанию, т.е (0, 0).
Название: Re: Динамическое изменение размера виджета и перенос начала координат. Отправлено: gil9red от Январь 20, 2014, 05:21 Минимально компилируемый код, с вашей проблемой в студию :)
Название: Re: Динамическое изменение размера виджета и перенос начала координат. Отправлено: PunisherPCK от Январь 21, 2014, 19:18 Ошибка такая: на рисунке строится эллипс по центральной точке и двум векторам. Часть находится за пределами видимой области.
(http://ib3.keep4u.ru/s/2014/01/21/ac/ac36e64777af954df570ac26565d74a8.jpg) (http://keep4u.ru/full/ac36e64777af954df570ac26565d74a8.html) Это виджет, на котором происходит рисование. Тут и переопределяется событие рисования. Код: GraphWidget::GraphWidget( int h, int w, QWidget * parent ) Виджет главного окна. Код: MainWindow::MainWindow(QWidget * parent) Это функция рисования, подходящая для любой кривой. Код: void GraphCurve::PaintCurve( MbCurve * curve, QPixmap * buf, const QColor & col1, const QColor & col2 ) Название: Re: Динамическое изменение размера виджета и перенос начала координат. Отправлено: gil9red от Январь 21, 2014, 19:59 Хм, ну я просил компилируемый код )
Ладно... Код Так и должно быть? А сам виджет принимает такие же размеры, как у картинки? Вы же тут указываете размер картинки, которая будет отрисована на виджете, и как я понимаю, которая будет передана в функцию void GraphCurve::PaintCurve(). Если я прав, виджету установите такие же размеры, как и у картинки, которая рисуется на нем (например, через setFixedSize()) Если проблема не связана с размеров виджета, тогда дело с параметрами отрисовки кривой :) Название: Re: Динамическое изменение размера виджета и перенос начала координат. Отправлено: PunisherPCK от Январь 21, 2014, 21:28 GraphWidget принимает размеры равные разрешению экрана + 1000px. Затем делаем его ресайз на эти размеры. Затем создаем QPixmap c теми же размерами. Затем рисуем pixmap из точки (0,0).
Одной из кривых является эллипс. Пользователь с помощью установки трех точек строит эллипс. Но может получиться, что часть эллипса находится в отрицательной полуплоскости. Моя же начинается с точки (0,0). Т.е если наименьшая, а следовательно самая дальнейшая точка имеет координаты (50, -100), нужно перенести систему координат с помощью translate в точку (0, -100), затем с помощью setFixedSize увеличить высоту виджета на 100px, затем с помощью drawPixmax отрисовать QPixmap, начиная с точки (0, -100). Правильный ход? Название: Re: Динамическое изменение размера виджета и перенос начала координат. Отправлено: gil9red от Январь 21, 2014, 22:01 Если это будет работать, то считайте, что сделали все правильно, а если очень нужно, допилить всегда можно ;)
|