Yababaa
Yababaa

Reputation: 577

How to print textfile with QPrinter

I have a list of textfiles in a treeview (with QFileSystemModel). If a textfile is selected and a print button is pressed. It should show a print dialog and the file should be printed out. I thought (after reading documentations and examples) it should look like this:

void berichtenhistorie::on_printButton_released()
{
     QModelIndex index = ui->treeView->currentIndex();
     QFileSystemModel *model = (QFileSystemModel*)ui->treeView->model();

     QString path = model->filePath(index);
     QString name = model->fileName(index);

     QString dir = path;
     dir.remove(dir.size() - name.size(), name.size());
     QFile file(path);

     if(file.open(QIODevice::WriteOnly | QIODevice::Text))
     {
         file.close();
         if(file.rename(QString("%1geprint %2").arg(dir, name)))
                 qDebug() << "renamed";
     }
     //all above works correctly

     QPrinter printer(QPrinter::HighResolution);
     printer.setPageSize(QPrinter::A4);
     printer.setOrientation(QPrinter::Portrait);
     printer.setPageMargins (15,15,15,15,QPrinter::Millimeter);
     printer.setFullPage(false);
     printer.setOutputFileName(path);
     printer.setOutputFormat(QPrinter::NativeFormat);
     QPainter painter(&printer);
     painter.end();
}

The renaming part (so above all the printing stuff) works as it should, no errors or anything. But I get abunch of errors at the printing error. I thought it was because of the libraries, because im using Qt5.

#include <QDirModel>
#include <QDebug>
#include <QMessageBox>
#include <QtPrintSupport/QPrintDialog>
#include <QtPrintSupport/QPrinter>
#include <QPainter>
#include <QFile>

Here are the errors: enter image description here

Upvotes: 1

Views: 2012

Answers (1)

Marek R
Marek R

Reputation: 37927

Apparently you are using Qt5, where printing functionality has been placed in separate add on (in Qt4 it is part of QtGui module), see documentation. So you have to add to pro file this line:

QT += printsupport

This will fix your build error, but your code doesn't print yet. You have to use painter.

If you are planing to support Qt4 it should be like this

greaterThan(QT_MAJOR_VERSION, 4) {
    QT += printsupport
}

Upvotes: 4

Related Questions