Qt Graphics 您所在的位置:网站首页 python调用打印机打印到纸上的相应位置 Qt Graphics

Qt Graphics

2024-05-29 03:31| 来源: 网络整理| 查看: 265

本文来研究一下Qt Graphics-View的打印功能实现。 在Qt的官方文档中介绍了Graphics-View的打印相关内容。

Qt中对打印的支持是有一个独立的printsupport模块来完成的,所以,要想在程序中使用Qt的打印功能,必须先在pro文件中添加下面这句代码:QT += printsupport

图形视图通过它的展示函数:QGraphicsScene::render()和QGraphicsView::render()提供单线(single-line)打印。这些函数提供相同的API,通过将QPainter传递给展示函数,你可以打印场景、视图的全部或部分内容。例子显示了如何使用QPainter将场景的全部内容打印到整页纸上。

QGraphicsScene scene;scene.addRect(QRectF(0, 0, 100, 200), QPen(Qt::black), QBrush(Qt::green));

QPrinter printer;if (QPrintDialog(&printer).exec() == QDialog::Accepted) {   QPainter painter(&printer);   painter.setRenderHint(QPainter::Antialiasing);   scene.render(&painter);}

场景和视图函数展示函数的差异是一个在场景坐标,另一个在视图坐标。QGraphicsScene::render()常用于打印无变换的场景的全部内容,如画几何数据文档等。QGraphicsView::render()适合于打印屏幕快照(screenshots),缺省情况下,它展示视图端口中的当前内容。

QGraphicsScene scene();scene.addRect(QRectF(0, 0, 100, 200), QPen(Qt::black), QBrush(Qt::green));//QPixmap pixmap; 官当文档这样是错误的,pixmap初始化为空,没空间可不行QPixmap pixmap(scene->sceneRect().width(), scene->sceneRect().height());QPainter painter(&pixmap);painter.setRenderHint(QPainter::Antialiasing);scene.render(&painter);painter.end();pixmap.save("scene.png");

当源区域和目标区域的大小不匹配时,源内容进行伸展以适合目标区域。通过传递Qt::AspectRatioMode给你正调用的展示函数,你可以在源内容伸缩时,保持或忽略纵横比。

 

下面是我实验的代码,仅供参考。

 

 C++ Code  1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374   void MainWindow::printReview() {     QPrinter printer(QPrinter::HighResolution);     // 创建打印预览对话框     QPrintPreviewDialog preview(&printer, this,                                 windowFlags() | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint);     // 当要生成预览页面时,发射paintRequested()信号     connect(&preview, SIGNAL(paintRequested(QPrinter *)),             this, SLOT(printPreview(QPrinter *)));     preview.exec(); }

void MainWindow::printPreview(QPrinter *printer) {     QPainter painter(printer);     painter.setRenderHints(QPainter::Antialiasing |                            QPainter::TextAntialiasing |                            QPainter::SmoothPixmapTransform,                            true);     m_pScene->render(&painter); }

void MainWindow::printToPrinter() {     QPrinter printer(QPrinter::HighResolution);     if (QPrintDialog(&printer).exec() == QDialog::Accepted)     {         QPainter painter(&printer);         painter.setRenderHint(QPainter::Antialiasing);         m_pScene->render(&painter);     } }

void MainWindow::printToImage() {     // 记住,一定要初始化QPixmap的大小     QPixmap pixmap(m_pScene->sceneRect().width(),                    m_pScene->sceneRect().height());     pixmap.fill(Qt::white);     QPainter painter(&pixmap);     painter.setRenderHint(QPainter::HighQualityAntialiasing);     m_pView->render(&painter);     painter.end();

    QString filePath = QFileDialog::getSaveFileName(

this, "Save Image",                        "", "BMP (*.bmp);;PNG (*.png);;JPEG (*.jpg *.jpeg);;All files (*.*)");     if (filePath == "" && pixmap.isNull())     {         qDebug() 


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有