crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> как растянуть картинку типа QGraphicsPixmapItem по QGraphicsView
Sigiz
  опции профиля:
сообщение 24.11.2010, 21:07
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 24.11.2010
Пользователь №: 2216

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброго всем.

Пытаюсь разобраться с КуТэ-шными QGraphicsScene, QGraphicsView и всяческими Item'ами...
Пишу класс свой класс MyWidget, на layout кладу стандартный View и хочу - для начала, чтобы картинка - а точнее карта равномерно растягивалась по View при изменении размера моего виджета. то есть мне не нужно масштабировать какой-то кусочек карты - она мне нужна вся. Как делаю. пишу класс:

class Evromap : public QGraphicsPixmapItem
{

private:
    QGraphicsView *loc_view;//местный указатель - будет приравнен к пришедшему в конструктор
    QPixmap emap; //сюда считаем каринку с картой

public:
    Evromap(QGraphicsView *view;);
    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *,QWidget *);//перерисовка
    virtual QRectF boundingRect() const;
};


в конструктор ему передаю ссылку на View, чтобы определить масштаб по осям при перерисовке. В конструкторе же загружаю картинку в QPixmap.
теперь перерисовка-рисовалка. делаю примерно следующее (примерно - потому что Creator дома сломался по неизвестынм причинам :) )

void  Evromap::paint(QPainter *painter, const QStyleOptionGraphicsItem *,QWidget *)
{
    int W = loc_view->width();
    int H = loc_view->height();
    QPixmap px = emap.scaled(W, H, Qt::IgnoreAspectRatio);
    painter->drawPixmap(0,0, px);
}


всё. запсукаем. появляется виджет. карта растянута как надо - по размеру View. А дальше, если тянуть за краешек виджета, то карта тоже увеличивается, но она ещё почему-то "плывёт", "едет" и т.п. по сцене пропорционально движению мыша - то есть карта перестаёт находиться в левом верхнем углу View, а куда-то смещается( Item'у после доабвления в сцену написал setPos(0,0)..
соответственно вопрос - что не так?) может всё оно выглядит косоруко - но я только неделю с Qt общаюсь..
Кстати интересно, что View принимает какие-то странные размеры. в конструкторе моего виджета я пишу:

    scene.setSceneRect(QRectF(0, 0, 500, 500));
    view.setScene(&scene);
    //здесь размеры виджета 640х480... откуда?!)


далее - слот кнопки на виджете, просто для интереса посмотрел - то есть уже после загрузки виджета - размера View 502х502. почему 502?)
вообщем нужен совет...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 25.11.2010, 21:00
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Sigiz, Изучи тему - Справка по кнопкам и тэгам форума
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sigiz
  опции профиля:
сообщение 27.11.2010, 13:50
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 24.11.2010
Пользователь №: 2216

Спасибо сказали: 0 раз(а)




Репутация:   0  


Обязательно изучу, спасибо что исправил!)

а с вопросом я так и не разобрался((
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 27.11.2010, 14:03
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


примерно так:
void MainWindow::fit()
{
    QRectF r = scene->sceneRect();
    view->fitInView(r, Qt::KeepAspectRatio);
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.11.2024, 20:48