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). 또한 그 링크에서 한 페이지에 맞지 않는 (너무 많은 열이나 행) 표를 인쇄하는 방법을 설명했습니다. – W55tKQbuRu28Q4xv

0

void QPrinter::setResolution (int dpi) 프린터 크기 당 여러 개의 위젯 픽셀을 강제로 표시하여 인쇄물에서 위젯을 효과적으로 확대/축소 할 수 있습니다.

+0

글쎄, 해봤지만 아무 것도 바뀌지 않는다 ... – besworland