Russian Qt Forum

Qt => Печать => Тема начата: GuardNW от Апрель 14, 2011, 15:06



Название: вопрос по QPrint
Отправлено: GuardNW от Апрель 14, 2011, 15:06
Код
C++ (Qt)
QPainter painter(this);
   QRect    mRect(painter.viewport());
 
   painter.setBrush(Qt::white);
   painter.setPen(QPen(Qt::green,3,Qt::DashDotDotLine));
   painter.drawRect(mRect);
   painter.drawLine(0,0,mRect.width(),mRect.height());
   painter.drawLine(mRect.width(),0,0,mRect.height());
 
   painter.setBrush(Qt::NoBrush);
   painter.setPen(QPen(Qt::blue,3));
   painter.drawEllipse(mRect);
 
   painter.setPen(Qt::black);
   painter.setFont(QFont("Arial Black",20,QFont::Normal));
   painter.drawText(mRect,Qt::AlignCenter,"Printer Draw Test");
 

вот есть такой код, но после нажатия на печать в диалоге, выводит сообщение:

Код:
"QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::viewport: Painter not active
QPainter::setBrush: Painter not active
QPainter::setPen: Painter not active"


Название: Re: вопрос по QPrint
Отправлено: Пантер от Апрель 14, 2011, 15:12
А в какой функции ты это выполняешь? Видать не в paintEvent?


Название: Re: вопрос по QPrint
Отправлено: GuardNW от Апрель 14, 2011, 15:21
Код:
//=========================================================================//
Printer::Printer(QWidget *pwgt):QWidget(pwgt)
{
    m_pPrinter = new QPrinter;
}
//=========================================================================//

//=========================================================================//
Printer::~Printer()
{
    delete m_pPrinter;
}
//=========================================================================//

//=========================================================================//
void Printer::paintEvent(QPaintEvent *pe)
{
    draw(this);
}
//=========================================================================//

//=========================================================================//
void Printer::slotPrint()
{
    QPrintDialog dlg(m_pPrinter,this);

    dlg.setMinMax(1,1);
    if(dlg.exec() == QDialog::Accepted)
      {
        draw(m_pPrinter);
      }
}
//=========================================================================//

//=========================================================================//
void Printer::draw(QPaintDevice *ppd)
{
    QPainter painter(this);
    QRect    mRect(painter.viewport());

    painter.setBrush(Qt::white);
    painter.setPen(QPen(Qt::green,3,Qt::DashDotDotLine));
    painter.drawRect(mRect);
    painter.drawLine(0,0,mRect.width(),mRect.height());
    painter.drawLine(mRect.width(),0,0,mRect.height());

    painter.setBrush(Qt::NoBrush);
    painter.setPen(QPen(Qt::blue,3));
    painter.drawEllipse(mRect);

    painter.setPen(Qt::black);
    painter.setFont(QFont("Arial Black",20,QFont::Normal));
    painter.drawText(mRect,Qt::AlignCenter,"Printer Draw Test");
}
//=========================================================================//
вот полный код, делаю по учебнику


Название: Re: вопрос по QPrint
Отправлено: Пантер от Апрель 14, 2011, 15:24
QPainter painter;
painter.begin(ppd);

так попробуй.


Название: Re: вопрос по QPrint
Отправлено: GuardNW от Апрель 14, 2011, 15:44
Спасибо! Помогло!