====== 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