====== Drucker ======
Die einfachste Methode eine Text-Datei drucken zu können, ist ein ''QTextDocument''-Objekt zu erstellen und dessen ''print()''-Methode aufzurufen. Diese Methode benötigt ein ''Printer''-Objekt als Parameter, das wir entweder selbst konfigurieren oder mit einem Dialog verknüpfen können. Über das ''Printer''-Objekt können wir auch in eine PDF- oder PostScript-Datei "drucken".
===== Druck-Dialog =====
===== Beispiel: Html2Pdf =====
Das folgende Beispiel konvertiert alle im Quellverzeichnis befindlichen HTML-Dateien (*.html, *.htm) in PDF-Dateien und speichert sie im Zielverzeichnis.
// main.cpp
#include "ConversionWidget.h"
#include
int main( int argc, char *argv[] )
{
QApplication app( argc, argv );
ConversionWidget widget;
widget.show();
return app.exec();
}
// ConversionWidget.h
#ifndef CONVERSIONWIDGET_H
#define CONVERSIONWIDGET_H
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
class ConversionWidget : public QWidget
{
Q_OBJECT
public:
ConversionWidget();
~ConversionWidget();
private slots:
void convertHtmlToPdf();
void chooseDirectory();
private:
QLineEdit *m_srcEdit,
*m_destEdit;
QPushButton *m_srcButton,
*m_destButton,
*m_convertButton,
*m_quitButton;
};
#endif // CONVERSIONWIDGET_H
// ConversionWidget.cpp
#include "ConversionWidget.h"
ConversionWidget::ConversionWidget()
{
m_srcEdit = new QLineEdit();
m_destEdit = new QLineEdit();
m_srcButton = new QPushButton( "Source" );
m_destButton = new QPushButton( "Destination" );
m_convertButton = new QPushButton( "Convert" );
m_quitButton = new QPushButton( "Quit" );
m_srcEdit->setDisabled( true );
m_destEdit->setDisabled( true );
m_convertButton->setDisabled( true );
connect( m_srcButton, SIGNAL( clicked() ), this, SLOT( chooseDirectory() ) );
connect( m_destButton, SIGNAL( clicked() ), this, SLOT( chooseDirectory() ) );
connect( m_convertButton, SIGNAL( clicked() ), this, SLOT( convertHtmlToPdf() ) );
connect( m_quitButton, SIGNAL( clicked() ), this, SLOT( close() ) );
QVBoxLayout *vLayout = new QVBoxLayout();
QHBoxLayout *hLayout = new QHBoxLayout();
hLayout->addWidget( m_srcEdit );
hLayout->addWidget( m_srcButton );
vLayout->addLayout( hLayout );
hLayout = new QHBoxLayout();
hLayout->addWidget( m_destEdit );
hLayout->addWidget( m_destButton );
vLayout->addLayout( hLayout );
vLayout->addStretch();
hLayout = new QHBoxLayout();
hLayout->addStretch();
hLayout->addWidget( m_convertButton );
hLayout->addWidget( m_quitButton );
vLayout->addLayout( hLayout );
setLayout( vLayout );
resize( 450, 120 );
setWindowTitle( "Html2Pdf" );
}
ConversionWidget::~ConversionWidget()
{
delete m_quitButton;
delete m_convertButton;
delete m_destButton;
delete m_srcButton;
delete m_destEdit;
delete m_srcEdit;
}
void ConversionWidget::convertHtmlToPdf()
{
QStringList htmlFilter;
htmlFilter << "*.html" << "*.htm";
QFileInfoList fileList = QDir( m_srcEdit->text() ).entryInfoList( htmlFilter );
QTextDocument document;
QPrinter printer;
printer.setPaperSize( QPrinter::A4 );
printer.setFullPage( true );
printer.setOrientation( QPrinter::Portrait );
printer.setPrintRange( QPrinter::AllPages );
printer.setOutputFormat( QPrinter::PdfFormat );
foreach( const QFileInfo& fileInfo, fileList )
{
QFile file( fileInfo.filePath() );
if( !file.open( QIODevice::ReadOnly | QIODevice::Text ) )
{
QMessageBox::critical( NULL, "Error", QString( "Error opening file: %1" ).arg( file.errorString() ), QMessageBox::Ok );
return;
}
document.setHtml( file.readAll() );
printer.setOutputFileName( m_destEdit->text() + "/" + fileInfo.baseName() + ".pdf" );
document.print( &printer );
}
}
void ConversionWidget::chooseDirectory()
{
QString dir = QFileDialog::getExistingDirectory();
if( !dir.isEmpty() )
{
if( sender() == m_srcButton )
m_srcEdit->setText( dir );
else if( sender() == m_destButton )
m_destEdit->setText( dir );
if( !m_srcEdit->text().isEmpty() && !m_destEdit->text().isEmpty() )
m_convertButton->setEnabled( true );
}
}
FIXME doku; Bilder werden nicht angezeigt