Russian Qt Forum
Ноябрь 24, 2024, 11:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Увеличение рисунка  (Прочитано 2179 раз)
Владимир
Гость
« : Октябрь 08, 2010, 16:43 »

Вывожу рисунок в QLabel

MyLabel *TabLb1=new MyLabel();
QPixmap pix1;
pix1.load(FilName+name.toString());
TabLb1->setPixmap(pix1);
TabLb1->setScaledContents(true);
TabLb1->show();

Как сделать так чтобы при нажатии мышью на какую либо область в рисунке, рисунок увеличивался с централизацией на месте клика?
Записан
shirushizo
Гость
« Ответ #1 : Октябрь 09, 2010, 09:39 »

1. Закинуть TabLb1 в QScrollArea.
2. Переопределять метод :
         void QWidget::mousePressEvent ( QMouseEvent * event )   [virtual protected]
3. В методе получаешь позицию курсора
        const QPoint & QMouseEvent::pos ()
4.Увеличиваешь картинку
         QPixmap QPixmap::transformed (...)
5. Увеличиваешь TabLb1
         TabLb1->resize(QPixmap::size())
6. Двигаешь ползунки
         QScrollBar* QScrollArea::horizontalScrollBar ()
         void QScrollBar::setValue(int value)
Записан
stump
Гость
« Ответ #2 : Октябрь 09, 2010, 18:53 »

widget.h

Код:
class MyLabel : public QLabel
{
    Q_OBJECT
public:
    MyLabel(QWidget *parent = 0);
    ~MyLabel();
    void mousePressEvent(QMouseEvent *ev);
};

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();
};

widget.cpp
Код:
QGraphicsProxyWidget* proxyWidget = NULL;
QGraphicsView *view = NULL;

MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{

}

void MyLabel::mousePressEvent(QMouseEvent *ev)
{
    qreal x_new = 0;
    qreal y_new = 0;
    qreal x_real = ev->pos().x();;
    qreal y_real = ev->pos().y();

    QTransform transform = proxyWidget->transform();

    transform.scale(2,2);
    transform.map(x_real,y_real,&x_new,&y_new);

    proxyWidget->setTransform(transform);

    view->setSceneRect(x_new-view->width()/2,y_new-view->height()/2,view->width(),view->height());
}

MyLabel::~MyLabel()
{

}

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    MyLabel *label = new MyLabel();

    label->setPixmap(QPixmap("..."));

    proxyWidget = new QGraphicsProxyWidget();

    proxyWidget->setWidget(label);

    QGraphicsScene *scene = new QGraphicsScene();
    view = new QGraphicsView(this);

    scene->addItem(proxyWidget);
    view->setScene(scene);
    view->resize(width(),height());

}

Widget::~Widget()
{

}

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.042 секунд. Запросов: 20.