2016-07-19 3 views
0

Qt4를 사용하여 이미지를 PNG 형식으로 인쇄하는 데 어려움을 겪고 있습니다. 어떤 도움을 주시면 감사하겠습니다Qt4로 PNG 형식으로 인쇄하는 방법

void DetectorView::printToFile() 
{ 

// A basic printing function 
QPrinter printer; 
QPrintDialog dialog(&printer, this); 
if (dialog.exec()==QDialog::Accepted) { 
    QPainter painter(&printer); 
    this->render(&painter); 
    std::cout << "INFO [DetectorView::printToFile] Wrote file " << std::endl; 
} 
else { 
    std::cout << "INFO [DetectorView::printToFile] Cancelling printer " << std::endl; 
} 
} 

: 아래 코드는 PDF 또는 PS하지만, PNG를 선택하는 방법 중 하나의 기본 설정이 있습니다!

+0

정말이 'QPrintDialog'를 사용해야합니까? 그냥'QImage'로 렌더링 한 다음 ['QImage :: save'] (http://doc.qt.io/qt-5/qimage.html#save)를 사용하면 어떨까요? –

답변

1

이 링크를 사용하면 Rendering QWidget to QImage loses alpha-channel 위젯을 QImage으로 렌더링 할 수 있습니다. 제공되는 링크가 Qt5위한 것입니다,하지만이 QT4와 함께 작동합니다 :

// render QWidget to QImage: 
QImage bitmap(this->size(), QImage::Format_ARGB32); 
bitmap.fill(Qt::transparent); 
QPainter painter(&bitmap); 
this->render(&painter, QPoint(), QRegion(), QWidget::DrawChildren); 

// save QImage to png file: 
QImageWriter writer("file.png", "png"); 
writer.write(bitmap); 

참고 : QImageWriter를 사용하여 다음

는, 당신은 PNG로 저장할 수 있습니다.

void DetectorView::printToFile() 
{ 
    QString default_name = "myImage.png"; 
    QImage bitmap(this->size(), QImage::Format_ARGB32); 
    QPainter painter(&bitmap); 
    this->render(&painter,QPoint(),QRegion(),QWidget::DrawChildren); 
    QString filename = QFileDialog::getSaveFileName(this, tr("Save File"),QDir::homePath()+"/"+default_name,tr("Image Files (*.png *.jpg *.bmp)")); 
    QImageWriter writer(filename, "png"); 
    writer.write(bitmap); 
    std::cout << "INFO [DetectorView::printToFile] Wrote image to file" << std::endl; 
} 

참고 대화 형 윈도우를 만드는 데 필요한 QFileDialog :

+0

이 방법이 효과적이지만 실제로 내가 원하는 행동은 아닙니다. 파일 이름과 위치를 변경할 수있는 대화식 GUI가 필요합니다. 그래도 고마워! 그것은 내가 밑에 게시 할 해결책을 얻는 것을 도왔다. –

+0

그것은 정말로 세부 사항이다. 제안한대로, 파일 이름을 픽업 할 때'QFileDialog :: getSaveFileName'을 사용하면된다. – jpo38

+0

공정하고 충분합니다. –

0

는 jpo38의 답변을 사용하여, 나는 내가 원하는 동작을 취득 확대했다.