qt 打印 刻度尺 曲線 複雜圖像

圖表費點勁還可以用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);

現在圖片顯示完整並且自動滿幅比例

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章