您的位置:首页 > 编程语言 > Qt开发

qt 打印 刻度尺 曲线 复杂图像

2016-07-04 10:30 281 查看
图表费点劲还可以用Html(textDocument.setHtml(html); textDocument.print(&printer);)的方法实现。曲线图呢?坐标轴的刻度尺,刻度对应的数字大小、位置,曲线缩放比例,每一个绘图点的绝对及相对坐标(绝对坐标零点是在纸的左上角,相对坐标零点是在坐标轴的左下角)……。在网上查阅了一些资料,在有些网友提供的代码里,他们还真的是一笔一笔画出来的,计算图表的高与宽,手动分页……。
  就在我准备先用CAD打个底稿,再用代码实现的时候,我看到了

painter.drawPixmap(0, 0, QPixmap::grabWidget(&Widget,int x,int y,int wide,int high));

这行代码的意思是说QPixmap类有一个方法grabWidget,可以把界面或控件转为图片,然后painter可以把这个图片打印出来。我写了一段代码如下:

QPrinter printer(QPrinter::HighResolution);

QPrintDialog printDialog(&printer, this);

     if (printDialog.exec() == QDialog::Accepted) {

         QWidget *myForm=new QWidget(this);

         myForm->setObjectName(QString::fromUtf8("Form"));

         myForm->resize(400, 300);

         QTableWidget *tableWidget;

         tableWidget = new QTableWidget(myForm);

         tableWidget->setColumnCount(3);

         tableWidget->setRowCount(4);

         tableWidget->setObjectName(QString::fromUtf8("tableWidget"));

         tableWidget->setGeometry(QRect(0, 0,400, 300));    

        QPainter painter(&printer);            

        painter.drawPixmap(0, 0, QPixmap::grabWidget(0,0,400,300));

     }

从打印机出来白纸上空空如也!究其原因,原来是grabWidget偷梁换柱了,将最后一行改一下

         QPixmap image;

         image=image.grabWidget(myForm,0,0,400,300);

         painter.drawPixmap(0,0,image);

现在好了。有影子了,但显示比例不对,修改如下:

            QPainter painter(printer);           

            QPixmap image;

            image=image.grabWidget(AllView,0,0,400, 300);

            QRect rect = painter.viewport();

            QSize size = image.size();

            size.scale(rect.size(), Qt::KeepAspectRatio);     //此处保证图片显示完整

            painter.setViewport(rect.x(), rect.y(),size.width(), size.height());

            painter.setWindow(image.rect());

            painter.drawPixmap(0,0,image);

现在图片显示完整并且自动满幅比例
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: