(solved)Drucken von bestimmten Seiten (PrintPageRange)
Verfasst: 6. Januar 2012 13:11
Das Drucken klappt eigentlich so wie gewünscht. Leider werden aber immer alle Seite gedruckt. Man kan zwar im QPrintDialog
die Seite festlegen aber dies hat kein Effekt.
Ich habe leider zu diesem Thema nichts gefunden selbst Qt-Bücher haben keine brauchbaren Infos zu diesem Thema.
Entweder ist das Problem zu trivial oder ich suche nicht richtig.
Hier mein Quellcode. Vielleicht kann mir einer da helfen.
(Solved) Ich habe zum Drucken QTextDocument benutzt was aber zu anderen Problemen führt.
die Seite festlegen aber dies hat kein Effekt.
Ich habe leider zu diesem Thema nichts gefunden selbst Qt-Bücher haben keine brauchbaren Infos zu diesem Thema.
Entweder ist das Problem zu trivial oder ich suche nicht richtig.
Hier mein Quellcode. Vielleicht kann mir einer da helfen.
Code: Alles auswählen
bool pdf = false;
QPrinter printer;
if (!pdf)
{
QPrintDialog dialog = QPrintDialog(&printer, this);
dialog.setWindowTitle(tr("Produktübersicht drucken"));
dialog.addEnabledOption(QAbstractPrintDialog::PrintSelection);
dialog.addEnabledOption(QAbstractPrintDialog::PrintToFile);
dialog.addEnabledOption(QAbstractPrintDialog::PrintPageRange);
dialog.addEnabledOption(QAbstractPrintDialog::PrintShowPageSize);
dialog.addEnabledOption(QAbstractPrintDialog::PrintCollateCopies);
if(dialog.exec() == QDialog::Accepted)
{
double border_x = 80.0;
double border_y = 60.0; //60
double cellpadding_x = 10.0;
double xpos = border_x;
double ypos = border_y;
double y_offset = 120.0; //Zellenhöhe 80
double x_offset = 100.0; //
QSize iconsize(120,90);
QRect qrect = printer.pageRect();
qrect = printer.paperRect ();
int num_rows = m_image_table->rowCount();
int num_cols = m_image_table->columnCount();
vector<int> col_widths;
col_widths.push_back(30);
//Die Breite der Wagerechten Linie wird berechnet
int totalwidth = 0; // 30
for(int i=0; i<num_cols; i++)
{
col_widths.push_back(m_image_table->columnWidth(i));
totalwidth += m_image_table->columnWidth(i);
}
//addiert die Iconbreite hinzu deswegen muss wieder Spaltenbreite des Icons abgezogen werden
totalwidth += iconsize.width() - m_image_table->columnWidth(num_cols);
QPainter painter;
painter.begin(&printer);
//Title and header on the first page
//TabellenHeader
QFont font;
font.setFamily("Arial");
font.setWeight(QFont::Bold);
font.setPointSize(12);
//Title
QFont title_font;
title_font.setFamily("Arial");
title_font.setWeight(QFont::Bold);
title_font.setPointSize(16);
//Datum
QDate date = QDate::currentDate();
double title_xpos = border_x - 10;
double title_ypos = border_y;
double first_page_header_xpos = border_x;
double first_page_header_ypos = title_ypos + 40;
double header_xpos = border_x;
double header_ypos = border_y;
painter.setFont(title_font);
painter.drawText(QPointF(title_xpos, title_ypos),
"Übersicht der eingelernten Säcke, " + date.toString("dd.MM.yyyy") );
painter.setFont(font);
painter.drawText(QPointF(first_page_header_xpos, first_page_header_ypos), "Nr.");
first_page_header_xpos += col_widths[0];
painter.drawText(QPointF(first_page_header_xpos, first_page_header_ypos), "Produkt-ID");
first_page_header_xpos += col_widths[1];
painter.drawText(QPointF(first_page_header_xpos, first_page_header_ypos), "Produktname");
first_page_header_xpos += col_widths[2];
painter.drawText(QPointF(first_page_header_xpos, first_page_header_ypos), "Datum");
first_page_header_xpos += col_widths[3] - 20 + iconsize.width() / 2;
painter.drawText(QPointF(first_page_header_xpos, first_page_header_ypos), "Bild");
//Font zurücksetzen
font.setWeight(QFont::Normal);
font.setPointSize(8);
painter.setFont(font);
//Tabelleninhalt
bool new_page = false;
bool with_title = true;
int page_count = 0;
//Zeilen erzeugen
for(int i=0; i<num_rows; i++)
{
xpos = border_x;
//Tables offset because of the title on the first page
if (with_title)
{
ypos+= first_page_header_ypos + 4 ;
}
if(i==0 || new_page)
{
//horizontale Linie
painter.drawLine(border_x - cellpadding_x, ypos - y_offset/2.0, border_x + totalwidth, ypos - y_offset/2.0);
//pageCount
page_count++;
painter.drawText(qrect.width() - 90, qrect.height() - 70, QString::number(page_count) );
new_page = false;
}
QString product_id = "";
QString product_name = "";
QString datum = "";
QString pic_path = "";
//Zeile erzeugen mit 5 Spalten
for(int j=0; j<num_cols; j++)
{
QPointF point(xpos, ypos + 5 );
switch (j)
{
case 0 :
{
//Nummerierung drucken
QString row = toString(i + 1).c_str();
painter.drawText(point, row);
break;
}
case 1:
{
//product_id
product_id = m_image_table->item(i,j-1)->text();
painter.drawText(point, product_id);
break;
}
case 2:
{
//product_name
product_name = m_image_table->item(i,j-1)->text();
painter.drawText(point, product_name);
break;
}
case 3:
{
//date
QString datum = m_image_table->item(i,j-1)->text();
painter.drawText(point, datum);
break;
}
case 4:
{
pic_path = m_image_table->item(i, 4)->text();
QPixmap pixmap(m_config.m_image_path.c_str()+ pic_path);
pixmap = pixmap.scaled(iconsize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
point.setY(ypos - iconsize.height()/2.0);
painter.drawPixmap(point, pixmap);
break;
}
}
//Senkrechte Linie
painter.drawLine(xpos-cellpadding_x, ypos-y_offset/2.0, xpos-cellpadding_x, ypos + y_offset/2.0);
//Die letzte senkrechte Linie
if(j == num_cols-1)
painter.drawLine(totalwidth + border_x, ypos-y_offset/2.0, totalwidth + border_x, ypos + y_offset/2.0);
//painter.drawLine(xpos+col_widths[j] + iconsize.width(), ypos-y_offset/2.0, xpos+col_widths[j] + iconsize.width(), ypos + y_offset/2.0);
xpos += col_widths[j];
}
//Waagerechte Linie
painter.drawLine(border_x - cellpadding_x, ypos + y_offset/2.0, border_x + totalwidth, ypos+y_offset/2.0);
ypos += y_offset;
//Untere Seitenrand ist erreicht, neue Seite beginnen
if(ypos >= qrect.height() - border_y -40)
{
printer.newPage();
ypos = header_ypos + 65;
new_page = true;
font.setFamily("Arial");
font.setWeight(QFont::Bold);
font.setPointSize(12);
header_xpos = border_x;
painter.setFont(font);
painter.drawText(QPointF(header_xpos, header_ypos), "Nr.");
header_xpos += col_widths[0];
painter.drawText(QPointF(header_xpos, header_ypos), "Produkt-ID");
header_xpos += col_widths[1];
painter.drawText(QPointF(header_xpos, header_ypos), "Produktname");
header_xpos += col_widths[2];
painter.drawText(QPointF(header_xpos, header_ypos), "Datum");
header_xpos += col_widths[3] - 20 + iconsize.width() / 2;
painter.drawText(QPointF(header_xpos, header_ypos), "Bild");
font.setWeight(QFont::Normal);
font.setPointSize(8);
painter.setFont(font);
}
with_title = false;
}
painter.end();
}
}