2012-03-19 5 views
0

テーブルビューを印刷しようとしています。私は自分のモデルを作成したテーブルビューを埋めるために。表を印刷するには、私は次のことをやっている:レンダリングメソッドを使用してQTableViewを印刷する

QPrinter printer; 
QPrintDialog printDialog(&printer, 0); 
if(QDialog::Accepted == printDialog.exec()) { 

    if(QPrinter::Landscape != printer.orientation()) { 
     printer.setOrientation(QPrinter::Landscape); 
    } 

    QPoint startPoint = QPoint(20, 20); 
    QRegion printRegion = QRegion(20, 20, printer.paperRect().width(),printer.paperRect().height()); 
    for(int i = 0; i < m_tables.size(); ++i) { 
     tableView->render(&printer, startPoint, printRegion, QWidget::DrawChildren); 
    } 
} 

問題は、私はPDFファイルに印刷していますし、そこに私はテーブルのほんの一部を見ることができるだということです。私はの領域のパラメータを変更すると助けになると思ったが、実際はそうではなかった。どのようにこれを修正するための任意の提案?

+0

:正しく表を印刷するには、あなただけのレンダリング通話を行うことができますか? – Koying

+0

右。私はセルとスクロールバーのカップルを見ることができました。 – besworland

答えて

2

ここに私の解決策があります。あなたの意見を聞いてうれしいです。

PrintTableModel* pTableModel = new PrintTableModel(); 

QTableView* pTableView = new QTableView; 
pTableView->setModel(pTableModel); 

int width = 0; 
int height = 0; 
int columns = pTableModel->columnCount(); 
int rows = pTableModel->rowCount(); 

pTableView->resizeColumnsToContents(); 

for(int i = 0; i < columns; ++i) { 
    width += pTableView->columnWidth(i); 
} 

for(int i = 0; i < rows; ++i) { 
    height += pTableView->rowHeight(i); 
} 

pTableView->setFixedSize(width, height); 
pTableView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 
pTableView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 

このコードは私を助けました。 、あなたは右、それが縁で切断されている意味「私はテーブルのほんの一部を見ることができています」と

pTableView->render(printer); 
+0

あなたのソリューションは良いですし、これも説明しています(http://blog.qt.digia.com/blog/2012/08/24/qt - 商業支援 - 毎週 - 25印刷 - 大型テーブル - 2)。また、それらのリンクでは、1ページに(あまりにも多くの列や行)フィットしないテーブルを印刷する方法を説明した。 – W55tKQbuRu28Q4xv

0

void QPrinter::setResolution (int dpi)プリンタサイズごとにいくつかのウィジェットピクセルを強制的に使用して、印刷物のウィジェットを効果的に拡大表示することができます。

+0

さて、私はそれを試しましたが、何も変わらない... – besworland

関連する問題