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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QPainter в QTextDocument  (Прочитано 3806 раз)
sektor
Самовар
**
Offline Offline

Сообщений: 100


Просмотр профиля
« : Март 30, 2018, 11:10 »

Как сделать так, чтобы QPainter рисовал в QTextDocument при этом чтобы текст, который там был не удалился?

Код:
Printer::Printer(QWidget *pwgt):QWidget(pwgt)
{
    m_pprinter = new QPrinter(QPrinter::HighResolution);

    textDocument = new QTextDocument;


    barcode = new EAN13(this);
    barcodeStr = "4650000000" ;
}

Printer::~Printer()
{
    delete m_pprinter;

    delete textDocument;
}

void Printer::slotPrint(QString data)
{
    m_pprinter->setPrinterName("Xprinter XP-360B");
    m_pprinter->setPageMargins(4,4,4,4, QPrinter::Millimeter);

    data.replace("12pt", "17pt");
    textDocument->setHtml(data);
    textDocument->setPageSize(m_pprinter->pageRect().size());

    QPrintPreviewDialog dialog(m_pprinter, this);
    connect(&dialog, SIGNAL(paintRequested(QPrinter*)), SLOT(slotPrint(QPrinter*)));
    dialog.exec();

}


void Printer::slotPrint(QPrinter *printer)
{
    //
    draw(printer);
    //textDocument->print(printer);
}

void Printer::draw(QPaintDevice *ppd)
{
    int Wd, Ht ;


    Wd = m_pprinter->width() ;
    Ht = m_pprinter->height() ;

    QPainter painter(ppd) ;


    barcode->makePattern(barcodeStr);

    qreal scale = painter.device()->logicalDpiX()/25.4;
    barcode->draw(QRectF(360, Ht-70, 29.83 * scale, 8.74* scale), painter) ;

    painter.end();

    textDocument->drawContents(&painter);
}


Записан
sektor
Самовар
**
Offline Offline

Сообщений: 100


Просмотр профиля
« Ответ #1 : Апрель 02, 2018, 08:54 »

Код:
void Printer::slotPrint(QPrinter *printer)
{
    //
    draw(printer);
    //textDocument->print(printer);
}

void Printer::draw(QPaintDevice *ppd)
{
    int Wd, Ht ;


    Wd = m_pprinter->width() ;
    Ht = m_pprinter->height() ;

    QPainter painter(ppd) ;


    barcode->makePattern(barcodeStr);

    qreal scale = painter.device()->logicalDpiX()/25.4;
    barcode->draw(QRectF(360, Ht-70, 29.83 * scale, 8.74* scale), painter) ;
   
   textDocument->drawContents(&painter);

    painter.end();

   }

Как такое не смог видеть, ай ай ай!!! Здесь есть кто ни будь? Что-то форум пустует.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #2 : Апрель 02, 2018, 21:48 »

Есть
Записан

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


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