我正在尝试设置 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
的白色背景:
我还尝试通过覆盖
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
。
如果你查看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();
}
注意:
QPalette::Dark
需要使用,只有通过它进行绘制视口的更改才会发生。
信用:ChrisW67