Skip to content

Commit 256b73d

Browse files
Inheriting QAbstractPrintDialog
Splitting the components to another file Fixing the width of Tabs and Controls
1 parent 165855c commit 256b73d

File tree

9 files changed

+194
-215
lines changed

9 files changed

+194
-215
lines changed

app/Controls.qml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ RowLayout {
1515
signal zoomSliderValueChanged(real value)
1616

1717
Rectangle {
18-
width: 320
18+
width: 350
1919
//Layout.preferredWidth: 320
2020
//Layout.minimumWidth: 320
2121

@@ -44,7 +44,7 @@ RowLayout {
4444

4545
Rectangle {
4646
id: rectangle
47-
width: 320
47+
width: 350
4848
//Layout.preferredWidth: 320
4949
//Layout.minimumWidth: 320
5050

app/Tabs.qml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ TabBar {
1010
currentIndex: index
1111
onCurrentIndexChanged: tabBarIndexChanged(tabBar.currentIndex)
1212

13-
width: 640
13+
width: 700
1414
height: 32
1515
TabButton {
1616
text: qsTr("General")

app/components.cpp

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
#include "components.h"
2+
#include <poppler/qt5/poppler-qt5.h>
3+
4+
Tabs::Tabs(QWidget* parent) :
5+
QWidget(parent),
6+
tabs(new QQuickWidget(QUrl("qrc:/app/Tabs.qml"), this)) {
7+
8+
tabs->setResizeMode(QQuickWidget::SizeRootObjectToView);
9+
tabs->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
10+
rootObject = tabs->rootObject();
11+
}
12+
13+
Root::Root(QWidget* parent) :
14+
QWidget(parent),
15+
root(new QQuickWidget(QUrl("qrc:/app/Root.qml"), this)) {
16+
17+
root->setResizeMode(QQuickWidget::SizeRootObjectToView);
18+
root->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
19+
rootObject = root->rootObject();
20+
}
21+
Preview::Preview(QPrinter* _printer, QWidget* parent) :
22+
QWidget(parent),
23+
printer(_printer),
24+
preview(new QPrintPreviewWidget(printer, this))
25+
{
26+
preview->setGeometry(0, 0, 380, 408);
27+
preview->fitToWidth();
28+
29+
printer->setPaperSize(QPrinter::Letter);
30+
printer->setOrientation(QPrinter::Portrait);
31+
printer->setFullPage(false);
32+
33+
QObject::connect(preview,
34+
SIGNAL(paintRequested(QPrinter*)),
35+
this,
36+
SLOT(print()));
37+
}
38+
39+
void Preview::print() {
40+
QPainter painter(printer);
41+
painter.setRenderHints(QPainter::Antialiasing |
42+
QPainter::TextAntialiasing |
43+
QPainter::SmoothPixmapTransform);
44+
45+
QFile f;
46+
f.setFileName(":/app/test.pdf");
47+
f.open(QIODevice::ReadOnly);
48+
QByteArray pdf=f.readAll();
49+
50+
Poppler::Document *document = Poppler::Document::loadFromData(pdf);
51+
if (!document)
52+
qCritical("File '%s' does not exist!", qUtf8Printable(":/app/test.pdf"));
53+
if (document->isLocked())
54+
qCritical("File %s is locked!", qUtf8Printable(":/app/test.pdf"));
55+
56+
pageCount = document->numPages();
57+
58+
Poppler::Page *page = document->page(pageNumber);
59+
if (page == nullptr)
60+
qCritical("File '%s' is empty?", qUtf8Printable(":/app/test.pdf"));
61+
62+
QImage image = page->renderToImage(72.0, 72.0, 0, 0, page->pageSize().width(), page->pageSize().height());
63+
if (image.isNull())
64+
qCritical("Error!");
65+
66+
paperHeight = page->pageSize().height();
67+
previewPainted = true;
68+
69+
painter.drawImage(0, 0, image, 0, 0, 0, 0, 0);
70+
painter.end();
71+
}
72+
73+
void Preview::setZoom(qreal zoomFactor) {
74+
if(previewPainted)
75+
preview->setZoomFactor(zoomFactor * (widgetHeight / paperHeight));
76+
preview->updatePreview();
77+
currentZoomFactor = zoomFactor;
78+
}
79+
80+
void Preview::showNextPage() {
81+
pageNumber = pageNumber < (pageCount - 1) ? pageNumber + 1 : pageNumber;
82+
preview->updatePreview();
83+
}
84+
85+
void Preview::showPrevPage() {
86+
pageNumber = pageNumber > 0 ? pageNumber - 1 : pageNumber;
87+
preview->updatePreview();
88+
}
89+
90+
Controls::Controls(QWidget* parent) :
91+
QWidget(parent),
92+
controls(new QQuickWidget(QUrl("qrc:/app/Controls.qml"), this)) {
93+
94+
controls->setResizeMode(QQuickWidget::SizeRootObjectToView);
95+
controls->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
96+
rootObject = controls->rootObject();
97+
}

app/components.h

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#ifndef COMPONENTS_H
2+
#define COMPONENTS_H
3+
4+
#include <QQuickItem>
5+
#include <QQuickWidget>
6+
#include <QPrintPreviewWidget>
7+
#include <QPainter>
8+
#include <QPrinter>
9+
10+
class Tabs : public QWidget {
11+
Q_OBJECT
12+
public:
13+
QQuickItem* rootObject;
14+
Tabs(QWidget* parent = Q_NULLPTR);
15+
~Tabs() = default;
16+
17+
private:
18+
QQuickWidget* tabs;
19+
};
20+
21+
class Root : public QWidget {
22+
Q_OBJECT
23+
public:
24+
QQuickItem* rootObject;
25+
Root(QWidget* parent = Q_NULLPTR);
26+
~Root() = default;
27+
28+
private:
29+
QQuickWidget* root;
30+
};
31+
32+
class Preview : public QWidget {
33+
Q_OBJECT
34+
public:
35+
Preview(QPrinter* _printer, QWidget* parent = Q_NULLPTR);
36+
~Preview() = default;
37+
qreal widgetHeight = 0;
38+
qreal currentZoomFactor = 1;
39+
40+
public Q_SLOTS:
41+
void print();
42+
void setZoom(qreal zoomFactor);
43+
void showNextPage();
44+
void showPrevPage();
45+
46+
private:
47+
QPrinter* printer;
48+
QPrintPreviewWidget* preview;
49+
int pageNumber = 0;
50+
int pageCount = 0;
51+
qreal paperHeight = 0;
52+
bool previewPainted = 0;
53+
};
54+
55+
class Controls : public QWidget {
56+
Q_OBJECT
57+
public:
58+
QQuickItem* rootObject;
59+
Controls(QWidget* parent = Q_NULLPTR);
60+
~Controls() = default;
61+
62+
private:
63+
QQuickWidget* controls;
64+
};
65+
66+
67+
#endif // COMPONENTS_H

app/window.cpp

Lines changed: 6 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
#include "window.h"
2-
#include <QDebug>
32

43
_Window *_window;
54

6-
_Window::_Window(QWidget *parent) :
5+
_Window::_Window(QPrinter *printer, QWidget *parent) :
76
QWidget(parent),
87
masterLayout(new QGridLayout(this)),
98
tabs(new Tabs(this)),
109
root(new Root(this)),
11-
preview(new Preview(this)),
10+
preview(new Preview(printer, this)),
1211
controls(new Controls(this))
1312
{
1413
/*
@@ -68,7 +67,7 @@ _Window::_Window(QWidget *parent) :
6867
masterLayout->addWidget(preview, 1, 1, 1, 1);
6968
masterLayout->addWidget(controls, 2, 0, 1, 2);
7069

71-
preview->widgetHeight = masterLayout->itemAt(2)->geometry().height();
70+
preview->widgetHeight = masterLayout->itemAt(1)->geometry().height();
7271

7372
adjustSize();
7473

@@ -78,22 +77,13 @@ _Window::_Window(QWidget *parent) :
7877
init_backend();
7978
}
8079

81-
Window::Window(QWidget *parent) :
82-
QWidget(parent)
80+
CPrintDialog::CPrintDialog(QPrinter* printer, QWidget *parent) :
81+
QAbstractPrintDialog(printer, parent)
8382
{
84-
_window = new _Window(parent);
83+
_window = new _Window(printer, parent);
8584
_window->show();
8685
}
8786

88-
void Window::resizeEvent(QResizeEvent *event) {
89-
QWidget::resizeEvent(event);
90-
// _window->tabs->resize(_window->container->itemAt(0)->geometry());
91-
// _window->root->resize(_window->content->itemAt(0)->geometry());
92-
// _window->controls->resize(_window->container->itemAt(2)->geometry());
93-
// _window->preview->widgetHeight = _window->content->itemAt(1)->geometry().height();
94-
// _window->preview->setZoom(_window->preview->currentZoomFactor);
95-
}
96-
9787
void _Window::tabBarIndexChanged(qint32 index) {
9888
root->rootObject->setProperty("index", index);
9989
}
@@ -185,114 +175,6 @@ void _Window::clearPrinters() {
185175
// qDebug() << "generalObject Not Found";
186176
}
187177

188-
Tabs::Tabs(QWidget* parent) :
189-
QWidget(parent),
190-
tabs(new QQuickWidget(QUrl("qrc:/app/Tabs.qml"), this)) {
191-
192-
tabs->setResizeMode(QQuickWidget::SizeRootObjectToView);
193-
tabs->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
194-
rootObject = tabs->rootObject();
195-
}
196-
197-
void Tabs::resize(const QRect& rect) {
198-
QWidget::resize(rect.width(), rect.height());
199-
tabs->resize(rect.width(), rect.height());
200-
}
201-
202-
Root::Root(QWidget* parent) :
203-
QWidget(parent),
204-
root(new QQuickWidget(QUrl("qrc:/app/Root.qml"), this)) {
205-
206-
root->setResizeMode(QQuickWidget::SizeRootObjectToView);
207-
root->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
208-
rootObject = root->rootObject();
209-
}
210-
211-
void Root::resize(const QRect& rect) {
212-
QWidget::resize(rect.width(), rect.height());
213-
root->resize(rect.width(), rect.height());
214-
}
215-
216-
Preview::Preview(QWidget* parent) :
217-
QWidget(parent),
218-
printer(new QPrinter{}),
219-
preview(new QPrintPreviewWidget(printer.get(), this))
220-
{
221-
printer->setPaperSize(QPrinter::Letter);
222-
printer->setOrientation(QPrinter::Portrait);
223-
printer->setFullPage(false);
224-
225-
QObject::connect(preview,
226-
SIGNAL(paintRequested(QPrinter*)),
227-
this,
228-
SLOT(print(QPrinter*)));
229-
}
230-
231-
void Preview::print(QPrinter* printer) {
232-
QPainter painter(printer);
233-
painter.setRenderHints(QPainter::Antialiasing |
234-
QPainter::TextAntialiasing |
235-
QPainter::SmoothPixmapTransform);
236-
237-
QFile f;
238-
f.setFileName(":/app/test.pdf");
239-
f.open(QIODevice::ReadOnly);
240-
QByteArray pdf=f.readAll();
241-
242-
Poppler::Document *document = Poppler::Document::loadFromData(pdf);
243-
if (!document)
244-
qCritical("File '%s' does not exist!", qUtf8Printable(":/app/test.pdf"));
245-
if (document->isLocked())
246-
qCritical("File %s is locked!", qUtf8Printable(":/app/test.pdf"));
247-
248-
pageCount = document->numPages();
249-
250-
Poppler::Page *page = document->page(pageNumber);
251-
if (page == nullptr)
252-
qCritical("File '%s' is empty?", qUtf8Printable(":/app/test.pdf"));
253-
254-
QImage image = page->renderToImage(72.0, 72.0, 0, 0, page->pageSize().width(), page->pageSize().height());
255-
if (image.isNull())
256-
qCritical("Error!");
257-
258-
paperHeight = page->pageSize().height();
259-
previewPainted = true;
260-
261-
painter.drawImage(0, 0, image, 0, 0, 0, 0, 0);
262-
painter.end();
263-
}
264-
265-
void Preview::setZoom(qreal zoomFactor) {
266-
if(previewPainted)
267-
preview->setZoomFactor(zoomFactor * (widgetHeight / paperHeight));
268-
preview->updatePreview();
269-
currentZoomFactor = zoomFactor;
270-
}
271-
272-
void Preview::showNextPage() {
273-
pageNumber = pageNumber < (pageCount - 1) ? pageNumber + 1 : pageNumber;
274-
preview->updatePreview();
275-
}
276-
277-
void Preview::showPrevPage() {
278-
pageNumber = pageNumber > 0 ? pageNumber - 1 : pageNumber;
279-
preview->updatePreview();
280-
}
281-
282-
Controls::Controls(QWidget* parent) :
283-
QWidget(parent),
284-
controls(new QQuickWidget(QUrl("qrc:/app/Controls.qml"), this)) {
285-
286-
controls->setResizeMode(QQuickWidget::SizeRootObjectToView);
287-
controls->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
288-
rootObject = controls->rootObject();
289-
}
290-
291-
void Controls::resize(const QRect& rect) {
292-
QWidget::resize(rect.width(), rect.height());
293-
controls->resize(rect.width(), rect.height());
294-
}
295-
296178
void ui_add_job_hold_until(char *startJobOption) {}
297179

298180
void ui_add_maximum_print_copies(char *_copies) {}

0 commit comments

Comments
 (0)