就在我准备先用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);
现在图片显示完整并且自动满幅比例