[Fix] Fixed preview window.

This commit is contained in:
Rtch90 2014-12-17 15:53:30 +00:00
parent a837960796
commit 9d1e82deb4
9 changed files with 75 additions and 15 deletions

View File

@ -50,6 +50,8 @@ void PDFFactory::createWidgets(void) {
connect(pdfTableView, SIGNAL(pageClicked(QMouseEvent*,QImage)), pdfPreview, connect(pdfTableView, SIGNAL(pageClicked(QMouseEvent*,QImage)), pdfPreview,
SLOT(pageClicked(QMouseEvent*,QImage))); SLOT(pageClicked(QMouseEvent*,QImage)));
connect(pdfTableView, SIGNAL(previewUpdate(Poppler::Page*)), pdfPreview,
SLOT(previewUpdate(Poppler::Page*)));
setWindowIcon(QIcon(":/img/hpdf.png")); setWindowIcon(QIcon(":/img/hpdf.png"));
setWindowTitle(tr("HPDF")); setWindowTitle(tr("HPDF"));

View File

@ -131,16 +131,22 @@ void PDFFileWidget::pageClickedHandler(QMouseEvent*, QImage) {
void PDFFileWidget::setDocument(Poppler::Document* document, QString fileName) { void PDFFileWidget::setDocument(Poppler::Document* document, QString fileName) {
document->setRenderHint(Poppler::Document::TextAntialiasing); document->setRenderHint(Poppler::Document::TextAntialiasing);
Poppler::Document* doc = Poppler::Document::load(fileName);
doc->setRenderHint(Poppler::Document::TextAntialiasing);
int numPages = document->numPages(); int numPages = document->numPages();
for(int i = 0; i < numPages; i++) { for(int i = 0; i < numPages; i++) {
Poppler::Page* pdfPage = document->page(i); Poppler::Page* pdfPage = document->page(i);
PDFPageWidget* pageWidget = new PDFPageWidget(); PDFPageWidget* pageWidget = new PDFPageWidget();
pageWidget->setPopplerPage(doc->page(i));
tgen.render(pageWidget, pdfPage); tgen.render(pageWidget, pdfPage);
connect(pageWidget, SIGNAL(pageClicked(QMouseEvent*,QImage)), this, connect(pageWidget, SIGNAL(pageClicked(QMouseEvent*,QImage)), this,
SIGNAL(pageClicked(QMouseEvent*,QImage))); SIGNAL(pageClicked(QMouseEvent*,QImage)));
connect(pageWidget, SIGNAL(previewUpdate(Poppler::Page*)), this,
SIGNAL(previewUpdate(Poppler::Page*)));
pagesContainerWidget->addPageWidget(pageWidget); pagesContainerWidget->addPageWidget(pageWidget);
/* Process event. */ /* Process event. */

View File

@ -75,5 +75,6 @@ private:
signals: signals:
void pageClicked(QMouseEvent*, QImage); void pageClicked(QMouseEvent*, QImage);
void pageClicked(QMouseEvent*, Poppler::Page*); void pageClicked(QMouseEvent*, Poppler::Page*);
void previewUpdate(Poppler::Page*);
}; };

View File

@ -44,6 +44,10 @@ void PDFPageWidget::setButton(QPushButton* btn) {
update(); update();
} }
void PDFPageWidget::setPopplerPage(Poppler::Page* pp) {
pPage = pp;
}
void PDFPageWidget::setThumbnail(QImage pageImage) { void PDFPageWidget::setThumbnail(QImage pageImage) {
image = pageImage; image = pageImage;
pixmap = QPixmap::fromImage(image); pixmap = QPixmap::fromImage(image);
@ -53,7 +57,10 @@ void PDFPageWidget::setThumbnail(QImage pageImage) {
} }
void PDFPageWidget::mousePressEvent(QMouseEvent* event) { void PDFPageWidget::mousePressEvent(QMouseEvent* event) {
if(pPage != NULL) {
emit pageClicked(event, image); emit pageClicked(event, image);
emit previewUpdate(pPage);
}
} }
void PDFPageWidget::leaveEvent(QEvent* event) { void PDFPageWidget::leaveEvent(QEvent* event) {

View File

@ -1,5 +1,6 @@
#pragma once #pragma once
#include <QFrame> #include <QFrame>
#include <poppler-qt5.h>
class QWidget; class QWidget;
class QPushButton; class QPushButton;
@ -15,6 +16,8 @@ class PDFPageWidget : public QFrame {
public: public:
PDFPageWidget(QWidget* parent = 0); PDFPageWidget(QWidget* parent = 0);
void setThumbnail(QImage pageImage); void setThumbnail(QImage pageImage);
void setPopplerPage(Poppler::Page*);
void setButton(QPushButton* btn); void setButton(QPushButton* btn);
QSize sizeHint() const; QSize sizeHint() const;
/*void setButtonImage(QImage* pageImage);*/ /*void setButtonImage(QImage* pageImage);*/
@ -29,10 +32,12 @@ private:
/*QVector<QPushButton> buttons;*/ /*QVector<QPushButton> buttons;*/
QPushButton* button; QPushButton* button;
QImage image; QImage image;
Poppler::Page* pPage;
QPixmap pixmap; QPixmap pixmap;
QPushButton* btn1, *btn2; QPushButton* btn1, *btn2;
signals: signals:
void pageClicked(QMouseEvent* event, QImage pageImage); void pageClicked(QMouseEvent* event, QImage pageImage);
void previewUpdate(Poppler::Page*);
}; };

View File

@ -1,8 +1,9 @@
#include <QtWidgets> #include <QtWidgets>
#include "pdf_preview_widget.h" #include "pdf_preview_widget.h"
int test;
PDFPreviewWidget::PDFPreviewWidget(QWidget* parent) : QWidget(parent) { PDFPreviewWidget::PDFPreviewWidget(QWidget* parent) : QWidget(parent) {
pPage = NULL;
} }
void PDFPreviewWidget::setImage(QImage image) { void PDFPreviewWidget::setImage(QImage image) {
@ -10,17 +11,43 @@ void PDFPreviewWidget::setImage(QImage image) {
update(); update();
} }
void PDFPreviewWidget::regenImage(void) {
if(pPage != NULL) {
double dpi;
double dpi2;
QSize targetSize = this->size();
QSizeF oriSize = pPage->pageSizeF();
double oriDpi = 72;
dpi = targetSize.height() / (float)oriSize.height()*72;
dpi2 = targetSize.width() / (float)oriSize.width()*72;
dpi = dpi<dpi2?dpi:dpi2;
previewImage = pPage->renderToImage(dpi, dpi);
}
}
void PDFPreviewWidget::previewUpdate(Poppler::Page* pp) {
pPage = pp;
regenImage();
update();
}
void PDFPreviewWidget::pageClicked(QMouseEvent* mouseEvent, QImage image) { void PDFPreviewWidget::pageClicked(QMouseEvent* mouseEvent, QImage image) {
setImage(image); /*setImage(image);*/
}
void PDFPreviewWidget::resizeEvent(QResizeEvent* event) {
regenImage();
} }
void PDFPreviewWidget::paintEvent(QPaintEvent* event) { void PDFPreviewWidget::paintEvent(QPaintEvent* event) {
QPainter painter(this); if(pPage != NULL) {
QPainter painter(this);
QPixmap pixmap = QPixmap::fromImage(previewImage); QPixmap pixmap = QPixmap::fromImage(previewImage);
pixmap = pixmap.scaled(size(), Qt::KeepAspectRatio); pixmap = pixmap.scaled(size(), Qt::KeepAspectRatio);
painter.drawPixmap(QRect((size().width() - pixmap.width()) / 2, painter.drawPixmap(QRect((size().width() - pixmap.width()) / 2,
(size().height() - pixmap.height()) / 2, (size().height() - pixmap.height()) / 2,
pixmap.width(), pixmap.height()), pixmap); pixmap.width(), pixmap.height()), pixmap);
} }
}

View File

@ -1,5 +1,6 @@
#pragma once #pragma once
#include <QWidget> #include <QWidget>
#include <poppler-qt5.h>
class QImage; class QImage;
class QPaintEvent; class QPaintEvent;
@ -9,15 +10,23 @@ class PDFPreviewWidget : public QWidget {
Q_OBJECT Q_OBJECT
public: public:
explicit PDFPreviewWidget(QWidget* parent = 0); explicit PDFPreviewWidget(QWidget* parent = 0);
void setImage(QImage image);
public slots: public slots:
void setImage(QImage image);
void regenImage(void);
void pageClicked(QMouseEvent* mouseEvent, QImage image); void pageClicked(QMouseEvent* mouseEvent, QImage image);
void previewUpdate(Poppler::Page*);
protected: protected:
void paintEvent(QPaintEvent* event); void paintEvent(QPaintEvent* event);
private: private:
QImage previewImage; QImage previewImage;
void resizeEvent(QResizeEvent* event);
/*PreviewGen tgen;*/
Poppler::Page* pPage;
signals:
void updatePreview(QImage);
}; };

View File

@ -41,6 +41,8 @@ void PDFTableWidget::loadFile(QString fileName) {
fileWidget->setDocument(doc, fileName); fileWidget->setDocument(doc, fileName);
connect(fileWidget, SIGNAL(pageClicked(QMouseEvent*,QImage)), this, connect(fileWidget, SIGNAL(pageClicked(QMouseEvent*,QImage)), this,
SIGNAL(pageClicked(QMouseEvent*,QImage))); SIGNAL(pageClicked(QMouseEvent*,QImage)));
connect(fileWidget, SIGNAL(previewUpdate(Poppler::Page*)), this,
SIGNAL(previewUpdate(Poppler::Page*)));
fileWidgets.append(fileWidget); fileWidgets.append(fileWidget);

View File

@ -30,5 +30,6 @@ private:
signals: signals:
void pageClicked(QMouseEvent*, QImage); void pageClicked(QMouseEvent*, QImage);
void previewUpdate(Poppler::Page*);
}; };