如何使用Qt4打印成PNG格式

How to print to PNG format with Qt4

我正在努力使用 Qt4 将图像打印为 PNG 格式。 下面的代码默认设置为PDF或PS,但无法选择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;
}
}

如有任何帮助,我们将不胜感激!

使用这个 link:Rendering QWidget to QImage loses alpha-channel, you can render your widget to a QImage

然后,使用QImageWriter,您可以将其保存为png:

// 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);

注意:link提供的是针对 Qt5 的,但这应该适用于 Qt4。

使用 jpo38 的答案,我进行了扩展以获得我想要的行为:

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;
}

注意创建交互式 window 所需的 QFileDialog。