Не удается распечатать на бумаге в Qt - PullRequest
1 голос

Не могу распечатать на бумаге по какой-то причине.Итак, у меня есть функциональный принтер.И я использую следующий код для печати qDialog и нескольких изображений:

QPrinter printer;
QPainter painter;
painter.begin(&printer);

double xscale = printer.width() / double(window->width());
double yscale = printer.height() / double(window->height());
double scale = qMin(xscale, yscale);
painter.scale(scale, scale);

QPrintDialog printDialog(&printer, this);
if (printDialog.exec() == QDialog::Accepted) {
    bool skip = true;

    if(ui->generalInfos->isChecked()) {
        //window is a QDialog I want to print out
        window->render(&painter);
        skip = false;
    }

    QList<Document *> docs;

    if(worker) {
        //a list with path to pictures
        docs = worker->getDocuments();
    }

    for(auto document : docs) {
        if(ui->Documents->isChecked(document->getID())) {
            for(auto scan : document->getScans()) {

                if(!skip) {
                    printer.newPage();
                }
                else {
                    skip = false;
                }

                painter.resetTransform();

                const QImage image(scan);
                const QPoint imageCoordinates(0,0);

                xscale = printer.width() / double(image.width());
                yscale = printer.height() / double(image.height());
                scale = qMin(xscale, yscale);
                painter.scale(scale, scale);

                painter.drawImage(imageCoordinates,image);
            }
        }
    }
}

painter.end();

, и это не работает.Ничего не печатается и Qt выдает ошибку:

QWin32PrintEngine::newPage: EndPage failed (The parameter is incorrect.)
QWin32PrintEngine::end: EndPage failed (0x31210cf7) (The parameter is incorrect.)

Может кто-нибудь помочь мне?

1 Ответ

1 голос
/ 09 марта 2019

Если вы упростите свой код, вы, вероятно, найдете решение. Итак, давайте начнем с выбора принтера, а затем (потом!) Начнем рисовать на принтере:

QPrinter printer;
QPrintDialog printDialog(&printer, this);
if (printDialog.exec() == QDialog::Accepted) 
{
    QPainter painter;
    painter.begin(&printer);
    window->render(&painter);
    painter.end();
}

Если это работает, добавьте больше своего старого кода в скетч выше. Если это не работает, что-то еще в вашей программе или в вашей среде (выбранный принтер?) Не так, поэтому вам нужно расширить поиск ошибок за пределы того, что вы показали нам здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...