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();
}
}