Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: thomas68 от Апрель 20, 2009, 13:45



Название: ::bitBlt
Отправлено: thomas68 от Апрель 20, 2009, 13:45

как реализовать на QT4



void Mpaint::paintEvent(QPaintEvent* ){
    ::bitBlt(this,0,0,&m_pix);
  ^^^^^^^^^^^^^^^^^
}


Название: Re: ::bitBlt
Отправлено: Rcus от Апрель 20, 2009, 14:58
http://doc.trolltech.com/4.5/porting4.html#qpaintdevice


Название: Re: ::bitBlt
Отправлено: thomas68 от Апрель 20, 2009, 15:35
http://doc.trolltech.com/4.5/porting4.html#qpaintdevice

мнебы примерчик как начинающему ....


Название: Re: ::bitBlt
Отправлено: pastor от Апрель 20, 2009, 15:48
как реализовать на QT4

Код
C++ (Qt)
void Mpaint::paintEvent(QPaintEvent* ){
   QPainter p(this);
   p.drawPixmap(0, 0, m_pix);
}


Название: Re: ::bitBlt
Отправлено: thomas68 от Апрель 20, 2009, 17:53
как реализовать на QT4

Код
C++ (Qt)
void Mpaint::paintEvent(QPaintEvent* ){
   QPainter p(this);
   p.drawPixmap(0, 0, m_pix);
}

да но только эта конструкция не работает в обратную сторону

::bitBlt (&m_pix,0,0,this);


Название: Re: ::bitBlt
Отправлено: Rcus от Апрель 20, 2009, 17:59
QPixmap QPixmap::grabWidget ( QWidget * widget, const QRect & rectangle )   [static]


Название: Re: ::bitBlt
Отправлено: pastor от Апрель 20, 2009, 18:17
QWidget::render(...)


Название: Re: ::bitBlt
Отправлено: thomas68 от Апрель 20, 2009, 18:34
QWidget::render(...)

а куда его вставлять ,,, ???

/*virtual*/void MousePaint::mouseMoveEvent(QMouseEvent* pe)
{
    QPainter painter;

    painter.begin(this);
    painter.drawLine(m_pt, pe->pos());
    m_pt = QPoint(pe->pos());
    painter.end();
      ::bitBlt(&m_pix, 0, 0, this);
}


Название: Re: ::bitBlt
Отправлено: thomas68 от Апрель 20, 2009, 18:58
QWidget::render(...)

Короче вот полный код из оригинала

/* ======================================================================
**  MousePaint.h
** ======================================================================
**
*/

#ifndef _MousePaint_h_
#define _MousePaint_h_

#include <qwidget.h>
#include <qpoint.h>
#include <qpixmap.h>

// ======================================================================
class MousePaint : public QWidget {
    Q_OBJECT
private:
    QPoint  m_pt;
    QPixmap m_pix;

protected:
    virtual void paintEvent     (QPaintEvent* pe);
    virtual void mousePressEvent(QMouseEvent* pe);
    virtual void mouseMoveEvent (QMouseEvent* pe);

public:
    MousePaint(QWidget* pwgt = 0);
};

#endif  //_MousePaint_h_


/////////////////////////////////////////////////////////////////////////
/* ======================================================================
**  MousePaint.cpp
** ======================================================================
**
*/
#include <QMouseEvent>
#include <qpainter.h>
#include "MousePaint.h"

// ----------------------------------------------------------------------
MousePaint::MousePaint(QWidget* pwgt/*= 0*/)
    : QWidget(pwgt)
{
    m_pix.scaled(width(), height());
    m_pix.fill(Qt::white);
}

// ----------------------------------------------------------------------
/*virtual*/void MousePaint::paintEvent(QPaintEvent*)
{
   ::bitBlt(this, 0, 0, &m_pix);
}

// ----------------------------------------------------------------------
/*virtual*/void MousePaint::mousePressEvent(QMouseEvent* pe)
{
    if (pe->button() & Qt::RightButton) {
        m_pix.fill(Qt::white);
        repaint();
    }
    else {
        QPainter painter;

        painter.begin(this);
        painter.drawPoint(pe->pos());
        m_pt = QPoint(pe->pos());
        painter.end();

        ::bitBlt(&m_pix, 0, 0, this);
    }
}

// ----------------------------------------------------------------------
/*virtual*/void MousePaint::mouseMoveEvent(QMouseEvent* pe)
{
    QPainter painter;

    painter.begin(this);
    painter.drawLine(m_pt, pe->pos());
    m_pt = QPoint(pe->pos());
    painter.end();
    ::bitBlt(&m_pix, 0, 0, this);
}











Название: Re: ::bitBlt
Отправлено: pastor от Апрель 20, 2009, 20:18
Код
C++ (Qt)
/*virtual*/void MousePaint::mousePressEvent(QMouseEvent* pe)
{
   if (pe->button() & Qt::RightButton) {
       m_pix.fill(Qt::white);
       repaint();
   }
   else {
       QPainter painter(&m_pix);
       painter.drawPoint(pe->pos());
       m_pt = QPoint(pe->pos());
       update();
   }
}
 
void MousePaint::paintEvent(QPaintEvent* ){
   QPainter p(this);
   p.drawPixmap(0, 0, m_pix);
}
 
/*virtual*/void MousePaint::mouseMoveEvent(QMouseEvent* pe)
{
   QPainter painter(&m_pix);
   painter.drawLine(m_pt, pe->pos());
   m_pt = QPoint(pe->pos());
   update();
}


Название: Re: ::bitBlt
Отправлено: thomas68 от Апрель 20, 2009, 22:20
Код
C++ (Qt)
/*virtual*/void MousePaint::mousePressEvent(QMouseEvent* pe)
{
   if (pe->button() & Qt::RightButton) {
       m_pix.fill(Qt::white);
       repaint();
   }
   else {
       QPainter painter(&m_pix);
       painter.drawPoint(pe->pos());
       m_pt = QPoint(pe->pos());
       update();
   }
}
 
void MousePaint::paintEvent(QPaintEvent* ){
   QPainter p(this);
   p.drawPixmap(0, 0, m_pix);
}
 
/*virtual*/void MousePaint::mouseMoveEvent(QMouseEvent* pe)
{
   QPainter painter(&m_pix);
   painter.drawLine(m_pt, pe->pos());
   m_pt = QPoint(pe->pos());
   update();
}

спасибо большое за пример , теперь компилируется но на экране ничего .... :'(





Название: Re: ::bitBlt
Отправлено: thomas68 от Апрель 20, 2009, 23:06
А другого варианта больше нет.
Этот у меня нерисует !! :(


Название: Re: ::bitBlt
Отправлено: pastor от Апрель 20, 2009, 23:11
Попробуй измени конструктор:

Код
C++ (Qt)
MousePaint::MousePaint(QWidget* pwgt/*= 0*/)
   : QWidget(pwgt)
{
   m_pix = QPixmap(width(), height());
   m_pix.fill(Qt::white);
}