Qt-interest Archive, July 2007
Repeating table headers on page breaks during printing
Message 1 in thread
Hello list,
I generate a rich text object from cells of a qtable widget.
I like to repeat the table header on every following page.
How can I do that? Are there any hints?
I'm using QT 3.3.4 on Suse Linux 9.3.
[code]
pageStr = "<table>;
// create table header
pageStr += "<tr>";
for ( int c = 0; c < table->numCols(); c++ )
{
pageStr += QString("<th>%1</th>") .arg(
table->horizontalHeader()->label(c) );
}
pageStr += "</tr>";
// create table rows
for ( int r = 0; r < table->numRows(); r++ )
{
pageStr += "<tr>";
for ( int c = 0; c < table->numCols(); c++ )
{
pageStr += QString("<td>%1</td>") .arg( table->text(r,c) );
}
pageStr += "</tr>";
}
pageStr += "</table>";
printer->setFullPage( TRUE );
if ( !p.begin(printer) )
{ return; }
QSimpleRichText richText( pageStr, QFont( "Courier", 10 ) );
QPaintDeviceMetrics* metrics = new QPaintDeviceMetrics( p.device() );
int dpiy = metrics->logicalDpiY();
int margin = (int) ( (2/2.54)*dpiy );
QRect view( margin, margin, metrics->width() - 2*margin,
metrics->height() - 2*margin );
richText.setWidth( &p, view.width() );
int page = 1;
do {
richText.draw( &p, margin, margin, view, colorGroup() );
view.moveBy( 0, view.height() );
p.translate( 0 , -view.height() );
p.drawText( view.right() - p.fontMetrics().width( QString::number( page ) ),
view.bottom() + p.fontMetrics().ascent() + 5,
QString::number( page ) );
if ( view.top() - margin >= richText.height() )
break;
printer->newPage();
page++;
} while (TRUE);
[/code]
--
[ signature omitted ]