如何设置QPdfView的视口背景颜色

问题描述 投票:0回答:1

我正在尝试设置 QPdfView

viewport
背景颜色,但与
QAbstractScrollArea
QPdfView
从中派生)不同,使用样式表不起作用。

我尝试这样做的方法如下:

#include <QApplication>
#include <QPdfView>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QPdfView *pdfView = new QPdfView();

    pdfView->setMinimumSize(100,100);
    //I tried to set stylesheet in different ways, in multiple combinations
    //but none worked
    //pdfView->setStyleSheet("background: white");
    pdfView->setStyleSheet("QWidget{background: white;}");
    //pdfView->viewport()->setStyleSheet("background: white");

    pdfView->show();

    return a.exec();
}

注意: 您需要找到并定位

PdfWidgets
,因此请根据以下内容修改您的
CMakeLists.txt
,以便能够使用
QPdfView

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets PdfWidgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets PdfWidgets)

target_link_libraries(MyExperiments PRIVATE
     Qt${QT_VERSION_MAJOR}::Widgets
     Qt${QT_VERSION_MAJOR}::PdfWidgets)

它的样子是这样的,

viewport
是灰色的,你可以在边框上看到
QPdfView
的白色背景:

PdfView with stylesheet

我还尝试通过覆盖

QAbstractScrollArea::paintEvent
来更改 viewport 的背景颜色,具体方法如下:

void paintEvent(QPaintEvent *event)
{
    QPdfView::paintEvent(event);

    QPainter p(viewport());
    QRect rect = viewport()->rect();

    rect.adjust(-1,-1,0,0);
    p.setBrush(QBrush(QColor(0,0,100)));
    p.drawRect(rect);
}    

但是最终画了

viewport
,没有改变它的背景颜色,所以它覆盖了打开的文档,因为如果我使用透明颜色,我可以通过它看到文档。

我对任何一种或其他方式都持开放态度,但如果可能的话,我想避免使用

paintEvent

c++ qt qtstylesheets qpainter qscrollarea
1个回答
1
投票

如果你查看paintEvent

QPdfView
的源代码,你会注意到QPalette::Dark被用来填充
viewport
,基于此,你可以改变它的背景颜色而不遮挡打开的文档如下:

#include <QApplication>
#include <QPdfView>
#include <QPalette>

int main(int argc, char **argv) 
{
    QApplication app(argc, argv);
    
    QPdfView view;
    
    QPalette palette = view.palette();
    palette.setBrush(QPalette::Dark, QColor("lime"));
    
    view.setPalette(palette);    
    view.show();
    
    return app.exec();
}

QPdfView viewport with lime background color

注意:

QPalette::Dark
需要使用,只有通过它进行绘制视口的更改才会发生。

来源: Qt论坛 如何设置QPdfView的视口背景颜色?

信用:ChrisW67

© www.soinside.com 2019 - 2024. All rights reserved.