如何使用 Qt4 打印为 PNG 格式
Posted
技术标签:
【中文标题】如何使用 Qt4 打印为 PNG 格式【英文标题】:How to print to PNG format with Qt4 【发布时间】:2016-07-19 08:59:01 【问题描述】:我正在努力使用 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;
任何帮助将不胜感激!
【问题讨论】:
这真的需要使用QPrintDialog
吗?为什么不直接渲染到QImage
,然后使用QImage::save
?
【参考方案1】:
使用此链接:Rendering QWidget to QImage loses alpha-channel,您可以将您的小部件呈现为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);
注意:提供的链接适用于 Qt5,但这应该适用于 Qt4。
【讨论】:
这确实有效,但不是我想要的行为。需要有一个交互式 GUI,您可以在其中更改文件名和位置。还是,谢谢!它帮助我得到了我将在下面发布的解决方案 这确实是一个细节,正如你所建议的,只需使用QFileDialog::getSaveFileName
来获取文件名。【参考方案2】:
使用 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;
注意创建交互式窗口所需的 QFileDialog。
【讨论】:
以上是关于如何使用 Qt4 打印为 PNG 格式的主要内容,如果未能解决你的问题,请参考以下文章