Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Владимир от Октябрь 08, 2010, 16:43



Название: Увеличение рисунка
Отправлено: Владимир от Октябрь 08, 2010, 16:43
Вывожу рисунок в QLabel

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

Как сделать так чтобы при нажатии мышью на какую либо область в рисунке, рисунок увеличивался с централизацией на месте клика?


Название: Re: Увеличение рисунка
Отправлено: shirushizo от Октябрь 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)


Название: Re: Увеличение рисунка
Отправлено: stump от Октябрь 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()
{

}