Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Qlab от Декабрь 16, 2013, 20:10



Название: отрисовка pixmap на форме с масштабированием
Отправлено: Qlab от Декабрь 16, 2013, 20:10
Собственно проблема:
нужно отрисовать картинку, которая изменяется при изменении ползунка (значения).
Был создан производный класс от  QWidget, преобразован в новый класс, перегружен метод paintEvent(), создан соотвествующий слот, для соединения ползунка и картинки, но картинка почему-то не выводится на виджет.
код:
Цитировать
#include <QPixmap>
#include <QWidget>
#ifndef MYPICTURE_H
#define MYPICTURE_H

class MyPicture : public QWidget
{
    Q_OBJECT
public:
        MyPicture( QWidget *parent = 0);
        ~MyPicture();
protected:
        void paintEvent(QPaintEvent* pe);
private:
        QPixmap pixmap;
        double part;
public slots:
      void  myslot(int val);
};
#endif // MYPICTURE_H

Цитировать
#include "mypicture.h"
#include <QPaintEvent>
#include <Qpainter>
#include <QPixmap>
#include <QPaintDevice>
MyPicture::MyPicture( QWidget *parent): QWidget(parent)
{
    pixmap.load("1.jpeg");

   part = 1;
  
}
MyPicture::~MyPicture()
{

}
void MyPicture::paintEvent(QPaintEvent* pe)
{


    QPainter painter(this);
    painter.begin(&pixmap);
    QRect r(0, 0, width(), height());
    painter.drawPixmap(r, pixmap);
    painter.drawRect(r);
//    if (pe->region().contains(r))
//    {
//        painter.drawRect(r);

//    }
}
void  MyPicture::myslot(int val)
{
    part = val;
}


Название: Re: отрисовка pixmap на форме с масштабированием
Отправлено: Bepec от Декабрь 16, 2013, 20:45
Ты рисуешь на пиксмапе пиксмап. Не вижу вывода на виджет :)


Название: Re: отрисовка pixmap на форме с масштабированием
Отправлено: Qlab от Декабрь 16, 2013, 21:20
На форме создан объект типа MyPicture. Линия из faq строится, а картинка не отображается.


Название: Re: отрисовка pixmap на форме с масштабированием
Отправлено: Bepec от Декабрь 16, 2013, 21:59
Код:
 QPainter painter(this);
Эй, Пейнтер, мы рисуем на виджете!
Код:
    painter.begin(&pixmap);
Нет, Пейнтер,  мы рисуем на картинке!
Код:
    QRect r(0, 0, width(), height());
О боже, создаём рект с размерами виджета.
Код:
    painter.drawPixmap(r, pixmap);
Пейнтер, рисуем картинку на самой картинке!
 
Код:
   painter.drawRect(r);
Пейнтер, рисуем рект на картинке.

PS яснее стало? Если нет, читаем про
Цитировать
painter.begin