Модераторы: JackYF, Любитель
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] Масштабирование картинки , под размер QGraphicsView, как? 
:(
    Опции темы
niXman
Дата 23.11.2009, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 4.7.2009

Репутация: -1
Всего: 0



Есть QGraphicsView, размером меньше размера загружаемой в него картинки.
Как масштабировать картинку под его размер?
--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
chaos
Дата 24.11.2009, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 5
Всего: 44



niXman
Код

void QGraphicsItem::setScale ( qreal factor )

+
Код

void QGraphicsItem::setTransformOriginPoint ( const QPointF & origin )


в помощь
PM WWW   Вверх
niXman
Дата 24.11.2009, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 4.7.2009

Репутация: -1
Всего: 0



chaos, Так картинка может быть любого размера, а размер QGraphicsView константный.
Или я не понял вашу идею целиком, или вы меня не полностью поняли...
--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
chaos
Дата 24.11.2009, 11:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 5
Всего: 44



niXman, вот те пища для ума smile

Код

#include <QtGui>

class GraphicsViewEx : public QGraphicsView
{
public:
    GraphicsViewEx(QGraphicsScene *scene)
        : QGraphicsView(scene)
    {}

protected:
    void resizeEvent(QResizeEvent *event)
    {
        foreach (QGraphicsItem *item, scene()->items()) {
            item->setPos(sceneRect().x(), sceneRect().y());
            item->resetTransform();
            item->scale(size().width() / item->boundingRect().right(),
                        size().height() / item->boundingRect().bottom());
        }
    }
};

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QGraphicsScene scene(0, 0, 500, 500);

    QPixmap pixmap;
    pixmap.load("0_2805a_2b9e39ea_orig.png");

    scene.addPixmap(pixmap);

    GraphicsViewEx view(&scene);
    view.show();

    return app.exec();
}


ЗЫ не стал делать проверку при масштабировании: что больше размеры айтема или вью тк принял по умолчаниюю: картинка больше smile


Это сообщение отредактировал(а) chaos - 24.11.2009, 12:57
PM WWW   Вверх
niXman
Дата 24.11.2009, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 4.7.2009

Репутация: -1
Всего: 0



chaos, Вот теперь понял. Спасибо!
--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
IrbisDev
Дата 3.3.2010, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 2.3.2010

Репутация: нет
Всего: нет



Код

foreach (QGraphicsItem *item, scene()->items()) {
            item->setPos(sceneRect().x(), sceneRect().y());
            item->resetTransform();
            item->scale(size().width() / item->boundingRect().right(),
                        size().height() / item->boundingRect().bottom());
        }

Можно заменить на:

Код

QGraphicsItem *item = this->scene()->items().at(0);
this->fitInView(item,Qt::KeepAspectRatio);

При условии, что на сцене всего один итем.
P.S. предыдущий пример не сохраняет пропорции
PM MAIL   Вверх
Google
  Дата 29.3.2020, 04:33 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0677 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.