你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

Qt打印功能;QPrintPreviewWidget使用;QPrintDialog使用;QPrintPreviewDialog使用;

2021-11-3 19:31:59

一、QPrintDialog使用

在需要使用的地方直接使用:

    QPrinter printerpng;//创建一个打印机
    QPrintDialog dlg(&printerpng);//创建打印页面,并传入打印机
    qDebug()<<dlg.exec();//显示打印界面,返回值判断点击的是0表示取消,1表示打印
    //界面显示后,可以通过printerpng获取设置的打印页面信息
    qDebug()<<"打印页面设置的纸张页面布局:"<<printerpng.pageLayout()<<endl;
    qDebug()<<"打印页面设置的打印机名称:"<<printerpng.printerName()<<endl;
    
    //打印页面设置的纸张页面布局: QPageLayout("A4", Portrait, l:0 r:0 t:0 b:0 pt) 
    //A4纸张大小;Portrait纵向;Landscape横向;l/r/t/b上下左右页边距;
    //打印页面设置的打印机名称: "导出为WPS PDF" 

    //下面的绘图参考这几个参数
    此处省略绘制代码************

二、QPrintPreviewDialog使用

在要使用打印预览的地方(比如打印预览按钮响应函数),添加如下代码:

    QPrintPreviewDialog dlg1;//创建打印预览dlg
    //绑定槽函数,当界面需要重绘时(纸张大小、页边距、页方向、最终点击打印),该信号被触发,用于绘制显示的页面
    connect(&dlg1, SIGNAL(paintRequested(QPrinter*)), SLOT(paintRequestedHandler(QPrinter*)));
    dlg1.setWindowFlag(Qt::WindowMinMaxButtonsHint);//设置窗口属性,支持最大最小化,不设置这个窗口不能双击标题栏放大缩小,也没有最大最小化按钮
    dlg1.exec();//界面显示

并在类头文件里面添加槽函数:

    void paintRequestedHandler(QPrinter *printerPixmap);

类文件编写槽函数(有多少个页面和每个页面显示内容要在这一个槽函数里面全部绘制出来哈):

void MainWindow::paintRequestedHandler(QPrinter *printerPixmap)
{
    //QPageLayout("A4", Landscape, l:0 r:0 t:0 b:0 pt);
    //A4纸张大小;Portrait纵向;Landscape横向;l/r/t/b上下左右页边距;
    qDebug()<<"当前页面布局:"<<printerPixmap->pageLayout();//下面的绘图参考这几个参数

    QPainter Painter(printerPixmap);
    Painter.drawText(30,20,"第1页");//页面显示内容

    printerPixmap->newPage();//新建立一个页面
    Painter.drawText(30,20,"第2页");//页面显示内容

    printerPixmap->newPage();//新建立一个页面
    Painter.drawText(30,20,"第3页");//页面显示内容
}

到这里你就可以看到预览界面(其实这里界面点击打印,就是上面的打印页面QPrintDialog):

 三、QPrintPreviewWidget使用

其实它就是个widget,用来显示打印预览界面的,和上面的QPrintPreviewDialog使用基本一致,只是它相当于只有QPrintPreviewDialog的下半部分,上半部分需要自己去实现,比如下面这个(WPS的打印预览界面):