Development/Tutorials/Printing Print Dialog: Difference between revisions

From KDE TechBase
(if you do changes to the tutorials, please test them at least once)
No edit summary
Line 5: Line 5:
KDE uses the Qt Printing infrastructure, but adds extra standard features to the Print Dialog, as well as allowing applications to add their own extensions.
KDE uses the Qt Printing infrastructure, but adds extra standard features to the Print Dialog, as well as allowing applications to add their own extensions.


== The code ==
== The files ==


'''main.cpp'''
<syntaxhighlight lang="cpp-qt" line>
<syntaxhighlight lang="cpp-qt" line>
#include <QtGui/QPainter>
#include <QtGui/QPainter>
Line 16: Line 17:
#include <KApplication>
#include <KApplication>
#include <KAboutData>
#include <KAboutData>
#include <KAction>
#include <KCmdLineArgs>
#include <KCmdLineArgs>


Line 37: Line 39:
     QPrintDialog *printDialog = KdePrint::createPrintDialog(&printer, QList<QWidget*>() << &yourOptionsWidget, this);
     QPrintDialog *printDialog = KdePrint::createPrintDialog(&printer, QList<QWidget*>() << &yourOptionsWidget, this);
     printDialog.setWindowTitle(i18n("Print Hello World"));
     printDialog.setWindowTitle(i18n("Print Hello World"));
     if (printDialog.exec()) {
     if (printDialog.exec())  
    {
         QPainter painter;
         QPainter painter;
         painter.begin(&printer);
         painter.begin(&printer);
         painter.drawText(100,100,"Hello World");
         painter.drawText(100,100,"Hello World");
         if (optionsWidget.printMoreText()) {
         if (optionsWidget.printMoreText())  
        {
         }
         }
         painter.end();  
         painter.end();  
Line 56: Line 60:
}
}


void KHelloWorld::slotFilePrintPreview() {
void KHelloWorld::slotFilePrintPreview()  
{
     QPrinter printer;
     QPrinter printer;
     KPrintPreview printPreview(&printer);
     KPrintPreview printPreview(&printer);
Line 64: Line 69:
</syntaxhighlight>
</syntaxhighlight>


== How to compile ==
'''CMakeLists.txt'''
 
=== CMakeLists.txt ===


<syntaxhighlight lang="text">
<syntaxhighlight lang="text">

Revision as of 19:02, 25 September 2011

The mission

To display the Print Dialog and print a document.

KDE uses the Qt Printing infrastructure, but adds extra standard features to the Print Dialog, as well as allowing applications to add their own extensions.

The files

main.cpp

#include <QtGui/QPainter>
#include <QtGui/QPrinter>

#include <KdePrintDialog>
#include <KPrintPreview>

#include <KApplication>
#include <KAboutData>
#include <KAction>
#include <KCmdLineArgs>

/*
This prints Hello World on your printer
*/

int main(int argc, char *argv[])
{
    KAboutData aboutData( "test", "test", "1.0", "test",
                          KAboutData::License_GPL, "(c) 2006" );
    KCmdLineArgs::init( argc, argv, &aboutData );
    KApplication app;

    KAction* m_printPreview = KStandardAction::printPreview(app, SLOT(slotFilePrintPreview()), actionCollection());

    KHelloWorldPrintDialogWidget optionsWidget;

    QPrinter printer;
    printer.setFullPage(true);
    QPrintDialog *printDialog = KdePrint::createPrintDialog(&printer, QList<QWidget*>() << &yourOptionsWidget, this);
    printDialog.setWindowTitle(i18n("Print Hello World"));
    if (printDialog.exec()) 
    {
        QPainter painter;
        painter.begin(&printer);
        painter.drawText(100,100,"Hello World");
        if (optionsWidget.printMoreText()) 
        {
        }
        painter.end(); 
        // this makes the print job start
    }
}

class KHelloWorldPrintDialogWidget : public QWidget
{
    bool printMoreText();
    void setPrintMoreText(bool state);

    setWindowTitle(i18n("Your Options Tab Title"));
}

void KHelloWorld::slotFilePrintPreview() 
{
    QPrinter printer;
    KPrintPreview printPreview(&printer);
    yourPrintDrawingRoutine(printer); // draws to the QPrinter
    printPreview.exec();
}

CMakeLists.txt

find_package(KDE4 REQUIRED)
include_directories( ${KDE4_INCLUDES} )
kde4_add_executable(printhelloworld printtest.cpp)
target_link_libraries(printhelloworld ${KDE4_KDECORE_LIBS} ${KDE4_KUTILS_LIBS} ${QT_QTGUI_LIBRARY})

Make and Run

Then do:

cmake .
make
./printhelloworld