[Development] Adding CPD support to Qt print dialog

Tor Arne Vestbø Tor.arne.Vestbo at qt.io
Mon Sep 26 17:05:37 CEST 2022

On 26 Sep 2022, at 16:54, Volker Hilsheimer <volker.hilsheimer at qt.io<mailto:volker.hilsheimer at qt.io>> wrote:

On 25 Sep 2022, at 20:58, Albert Astals Cid <aacid at kde.org<mailto:aacid at kde.org>> wrote:

El dissabte, 24 de setembre de 2022, a les 12:45:00 (CEST), Tor Arne Vestbø va
On 23 Sep 2022, at 19:21+02:00, Gaurav Guleria <gaurav.gen3 at gmail.com<mailto:gaurav.gen3 at gmail.com>>

As far as I know, the CUPS is currently implemented in Qt at two different
places: src/plugins/printsupport/cups/ and directly within the dialog
src/printsupport/dialogs/qprintdialog_unix.cpp. By implementing CPDB
support as a plugin, does it mean that we create a similar
src/plugins/printsupport/cpdb which uses CPDB to enumerate printers
instead of CUPS? If so, what about the unix print dialog, don't we need
to add the CPDB code there too (#if QT_CONFIG(cpdb) ... #endif
constructs, just like CUPS)?

The QCupsJobWidget is documented as "a widget to add to QPrintDialog to
enable extra CUPS options such as Job Scheduling, Job Priority or Job
Billing”, so I don’t think having any CPDB specific code in the UNIX print
dialog is required as a first step to bring a CPDB print backend up.

Once we get to that point we can look at possibly adding new API for the
print engines to deal with the needs of QCupsJobWidget and the like, so
that we don’t need CUPS/CPDB specifics in the dialog code.

The "problem" is not QCupsJobWidget, but the print dialog itself.

qprintdialog_unix.cpp and qpagesetupdialog_unix.cpp are full of
#if QT_CONFIG(cups)

IMHO for now the same solution of adding ifdefs should be accepted for CPDB.

Ideally in the future an abstraction so that those ifdefs are not needed
should be introduced, but I have the feeling that asking that abstraction to
be added now is a bit of "asking too much".


I think it will be easier to understand what abstraction we need once we have a patch to look at that implements CPDB support. That we don’t have a QPA-level abstraction for print dialogs in Qt shouldn’t block adding CPDB support.

However, rather than throwing more #if’ery complexity into qprintdialog_unix.cpp it might be best to make a dedicated implementation of a CPDB-dialog. Or rather two implementations, as Shawn has pointed out: one for Qt Widgets and one for Qt Quick. And if those two are then based on a common abstraction that provides the logic and is informed by what we already have in QAbstractPrintDialog - but without the dependency to Qt Widgets - then that might perhaps become a basis for what we want in QPA.

Yeah, the print dialogs are much more coupled to the print engines than I initially thought/expected. I agree that a separate dialog is preferable to adding even more #ifdefs to the existing unix dialog. Then we have a basis for possible future abstractions.

Tor Arne

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20220926/89ef93de/attachment.htm>

More information about the Development mailing list