就在我準備先用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);
現在圖片顯示完整並且自動滿幅比例