2013-03-26 7 views
5

मैं QWebView के माध्यम से रिपोर्ट बनाने की कोशिश कर रहा हूं, इसे QPrintPreviewDialog के माध्यम से दिखाएं और इसे प्रिंट करें। मान लीजिए कि मैं कई पेजों पर विभाजित 100-पंक्ति तालिका बनाना चाहता हूं और प्रत्येक पंक्ति के पाद लेख (मेरे वास्तविक कार्य का सार संस्करण) में वर्तमान पंक्ति संख्या जोड़ना चाहता हूं। मेरे कोड:QWebView: प्रिंट समस्याएं

void MainWindow::preview(){ 
    QPrinter printer; 
    printer.setPageSize(QPrinter::A4); 
    printer.setOrientation(QPrinter::Portrait); 
    printer.setPageMargins(10,10,10,10,QPrinter::Millimeter); 

    QPrintPreviewDialog print_preview(&printer, this); 
    print_preview.setWindowState(Qt::WindowMaximized); 
    connect(&print_preview, SIGNAL(paintRequested(QPrinter*)), this, SLOT(paint_pages(QPrinter*))); 
    print_preview.exec(); 
} 

void MainWindow::paint_pages(QPrinter *printer){ 
    QList<QWebView*> pages; 
    QWebView *current = 0; 
    QPainter painter(printer); 
    int i = 0; 
    while(i <= 100){ 
     current = new QWebView(); 
     pages << current; 
     i = populate_web(current, printer, i); 
    } 
    int pc = pages.count(); 
    for(i = 0; i < pc; i++){ 
     if(i != 0) printer->newPage(); 
     pages.at(i)->render(&painter); 
    } 
    for(i = 0; i < pc; i++) 
     delete pages.at(i); 
} 


int MainWindow::populate_web(QWebView *pg, QPrinter *printer, int n){ 
    QString html = "<html><body>"; 
    html += "<table cellspacing=0 border = 1 style='border-collapse: collapse'>"; 
    int page_height = printer->paperRect(QPrinter::Point).height(); 
    for(++n; n <= 100; n++){ 
     html += QString("<tr><td width=200>%1</td><td width=200>%2</td><td width=300>%3</td></tr>").arg(n).arg(n*n).arg(n*n*n); 
     QString html2 = html + "</table></body></html>"; 
     pg->setHtml(html2); 
     int content_height = pg->page()->mainFrame()->contentsSize().height(); 
     if(content_height + 20 > page_height){ 
      html += "</table>"; 
      html += QString("<p>Current value: %1</p>").arg(n); 
      break; 
     } 
    } 
    if(n > 100) html += "</table>"; 
    html += "</body></html>"; 

    pg->setHtml(html); 
    return n; 
} 

तो, मैं, पूरे कागज रेक्ट पर तालिका प्राप्त करने के लिए 10 मिलीमीटर मार्जिन के अलावा उम्मीद है। लेकिन इसके बजाय, मुझे कुछ अजीब लगता है (PICTURE HERE); और क्या है - दूसरे पृष्ठ पर स्क्रॉलबार पहले पृष्ठ पर दिखाई नहीं देता है। मुझे अपनी तालिका के साथ पूरे पृष्ठ को भरने और स्क्रॉलबार से पृष्ठों को रिलीज़ करने के लिए क्या करना है?

उत्तर

1

लाइन के बाद:

pg->setFixedSize(QSize(printer->width(),printer->height())); 
:

html += "</body></html>"; 

इस पंक्ति जोड़ें

संबंधित मुद्दे