Qt 修改QPrintPreviewWidget背景颜色

326 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

头图

Qt 修改QPrintPreviewWidget背景颜色

​ Qt 开发搞旧了,终归是要来到打印的环节的,如果没有,那就是还不够旧。今天终于解决了好久之前挖的坑了,第一次使用QPrintPreviewWidget,背景怎么也搞不定,最终还是在群里得到大佬指点,才可以实现,不过不是透明,而是投机的透明。


[TOC]

关键字: QPrintPreviewWidgetQt样式表qss背景

代码核心

​ 其实核心代码很简单,还是Qss,这是我开始走错了方向。代码如下:

mPrintPreviewWidget->setStyleSheet("QGraphicsView {qproperty-backgroundBrush: #151740;border:0px}");

这里我使用了程序的背景色来填充,把边框设置成0px。

这样就可以,上下对比图

未实现前

实现后

打印机初始化

初始化打印机,在测试过程中,很耗时,所以我这里把它移入到了线程里面

void MPrinter::run()
{
    if(!mPdfPrinter)
    {
        mPdfPrinter = new QPrinter();
        mPdfPrinter->setPageSize(QPageSize(QPageSize::A4));                                     // 设置纸张大小
        mPdfPrinter->setResolution(300);
        mPdfPrinter->setPageMargins(QMarginsF(10,10,10,10));                                    // 设置页边距
        mPdfPrinter->setPageOrientation(QPageLayout::Orientation::Portrait);                    // 设置纸张方向
        emit signalQPrinterNewFinished();
    }
}

线程类也很简蛋,就只一个打印机指针。如下

class MPrinter : public QThread
{
    Q_OBJECT
public:
    QPrinter* mPdfPrinter = nullptr;
    void run();

signals:
    void signalQPrinterNewFinished();

};

初始化也很重要

/**
 * @brief Turing_Report_Kernel::initKernel
 * 打印模块初始化
 */
void Turing_Report_Kernel::initKernel()
{
    mPrinter = new MPrinter();
    connect(mPrinter,&MPrinter::signalQPrinterNewFinished,this,[=](){
        if(mPrintPreviewWidget)
        {
            QLayoutItem *item = nullptr;
            while((item = ui->verticalLayout->takeAt(0)) != nullptr)                        // 清空layout元素
            {
                delete item;
            }

            delete mPrintPreviewWidget;
            mPrintPreviewWidget = nullptr;                                                  // 需要删除后,再创建,才能刷新,触发repaint
        }
        if(!mPrintPreviewWidget)
        {
            mPrintPreviewWidget = new QPrintPreviewWidget(mPrinter->mPdfPrinter,ui->widget);

            mPrintPreviewWidget->setStyleSheet("QGraphicsView {qproperty-backgroundBrush: #151740;border:0px}");
//            mPrintPreviewWidget->setStyleSheet("QGraphicsView {qproperty-backgroundBrush: rgba(0,0,0,20);border:0px}");
            mPrintPreviewWidget->setAttribute(Qt::WA_TranslucentBackground);
            mPrintPreviewWidget->setViewMode(QPrintPreviewWidget::SinglePageView);
            mPrintPreviewWidget->setZoomMode(QPrintPreviewWidget::FitInView);               // FitInView:根据视野大小,自动缩放,会完整显示一页;FitToWidth:根据宽度缩放,会无法完整显示一页
            ui->verticalLayout->addWidget(mPrintPreviewWidget);
        }
        connect(mPrintPreviewWidget, SIGNAL(paintRequested(QPrinter*)), this, SLOT(slot_previewPdfOnWidget(QPrinter*)));
        mPrintPreviewWidget->repaint();
    });
    mPrinter->start();

}

博客签名2021