4#include "qplatformdefs.h"
5#include <QtPrintSupport/private/qtprintsupportglobal_p.h>
7#include "private/qabstractprintdialog_p.h"
8#if QT_CONFIG(messagebox)
9#include <QtWidgets/qmessagebox.h>
12#if QT_CONFIG(filedialog)
15#include <QtCore/qdebug.h>
16#include <QtCore/qdir.h>
17#include <QtCore/qglobal.h>
18#include <QtCore/qstringconverter.h>
19#include <QtGui/qevent.h>
20#if QT_CONFIG(filesystemmodel)
21#include <QtGui/qfilesystemmodel.h>
23#include <QtWidgets/qstyleditemdelegate.h>
24#include <QtWidgets/qformlayout.h>
25#include <QtPrintSupport/qprinter.h>
27#include <qpa/qplatformprintplugin.h>
28#include <qpa/qplatformprintersupport.h>
30#include <private/qprintdevice_p.h>
32#include <QtWidgets/qdialogbuttonbox.h>
34#if QT_CONFIG(regularexpression)
38#if QT_CONFIG(completer)
39#include <private/qcompleter_p.h>
41#include "ui_qprintpropertieswidget.h"
42#include "ui_qprintsettingsoutput.h"
43#include "ui_qprintwidget.h"
47#include <private/qcups_p.h>
48#if QT_CONFIG(cupsjobwidget)
117 Ui::QPrintPropertiesWidget
widget;
119#if QT_CONFIG(cupsjobwidget)
124 bool createAdvancedOptionsWidget();
125 void setPrinterAdvancedCupsOptions()
const;
126 void revertAdvancedOptionsToSavedValues()
const;
127 void advancedOptionsUpdateSavedValues()
const;
128 bool anyPpdOptionConflict()
const;
129 bool anyAdvancedOptionConflict()
const;
185 ppd_option_t *m_duplexPpdOption;
190 bool filePrintersAdded;
205 void _q_togglePageSetCombo(
bool);
206#if QT_CONFIG(messagebox)
207 void _q_checkFields();
209 void _q_collapseOrExpandDialog();
215 void updateWidgets();
254 widget.setupUi(content);
262 widget.pageSetup->setPrinter(printer, currentPrintDevice, outputFormat, printerName);
264#if QT_CONFIG(cupsjobwidget)
266 widget.tabs->insertTab(1, m_jobOptions,
tr(
"Job Options"));
269 const int advancedTabIndex = widget.tabs->indexOf(widget.cupsPropertiesPage);
271 m_currentPrintDevice = currentPrintDevice;
272 const bool anyWidgetCreated = createAdvancedOptionsWidget();
274 widget.tabs->setTabEnabled(advancedTabIndex, anyWidgetCreated);
276 connect(widget.pageSetup, &QPageSetupWidget::ppdOptionChanged,
this, [
this] {
277 widget.conflictsLabel->setVisible(anyPpdOptionConflict());
282 widget.tabs->setTabEnabled(advancedTabIndex,
false);
296 widget.pageSetup->setupPrinter();
297#if QT_CONFIG(cupsjobwidget)
298 m_jobOptions->setupPrinter();
305 setPrinterAdvancedCupsOptions();
311 widget.pageSetup->revertToSavedValues();
313#if QT_CONFIG(cupsjobwidget)
314 m_jobOptions->revertToSavedValues();
318 revertAdvancedOptionsToSavedValues();
325#if QT_CONFIG(cups) && QT_CONFIG(messagebox)
326 if (widget.pageSetup->hasPpdConflict()) {
327 widget.tabs->setCurrentWidget(widget.tabPage);
329 tr(
"There are conflicts in page setup options. Do you want to fix them?"),
333 }
else if (anyAdvancedOptionConflict()) {
334 widget.tabs->setCurrentWidget(widget.cupsPropertiesPage);
336 tr(
"There are conflicts in some advanced options. Do you want to fix them?"),
341 advancedOptionsUpdateSavedValues();
344#if QT_CONFIG(cupsjobwidget)
345 m_jobOptions->updateSavedValues();
348 widget.pageSetup->updateSavedValues();
356 widget.conflictsLabel->setVisible(anyPpdOptionConflict());
364static const char *ppdOptionProperty =
"_q_ppd_option";
367static const char *ppdOriginallySelectedChoiceProperty =
"_q_ppd_originally_selected_choice";
370static const char *warningLabelProperty =
"_q_warning_label";
372static bool isBlacklistedGroup(
const ppd_group_t *
group)
noexcept
377static bool isBlacklistedOption(
const char *keyword)
noexcept
380 const char *cupsOptionBlacklist[] = {
388 auto equals = [](
const char *keyword) {
389 return [keyword](
const char *candidate) {
390 return qstrcmp(keyword, candidate) == 0;
393 return std::any_of(std::begin(cupsOptionBlacklist), std::end(cupsOptionBlacklist), equals(keyword));
396bool QPrintPropertiesDialog::createAdvancedOptionsWidget()
398 bool anyWidgetCreated =
false;
400 ppd_file_t *ppd = qvariant_cast<ppd_file_t*>(m_currentPrintDevice->property(
PDPK_PpdFile));
404 if (!toUnicode.isValid()) {
405 qWarning() <<
"QPrinSupport: Cups uses unsupported encoding" << ppd->lang_encoding;
412 for (
int i = 0;
i < ppd->num_groups; ++
i) {
413 const ppd_group_t *
group = &ppd->groups[
i];
415 if (!isBlacklistedGroup(
group)) {
418 for (
int i = 0;
i <
group->num_options; ++
i) {
421 if (!isBlacklistedOption(
option->keyword)) {
424 const auto setPpdOptionFromCombo = [
this, choicesCb,
option] {
432 widget.conflictsLabel->setVisible(anyPpdOptionConflict());
435 bool foundMarkedChoice =
false;
436 bool markedChoiceNotAvailable =
false;
437 for (
int i = 0;
i <
option->num_choices; ++
i) {
438 const ppd_choice_t *choice = &
option->choices[
i];
441 if (choiceIsInstallableConflict &&
static_cast<int>(choice->marked) == 1) {
442 markedChoiceNotAvailable =
true;
443 }
else if (!choiceIsInstallableConflict) {
444 choicesCb->
addItem(toUnicode(choice->text),
i);
445 if (
static_cast<int>(choice->marked) == 1) {
448 foundMarkedChoice =
true;
449 }
else if (!foundMarkedChoice &&
qstrcmp(choice->choice,
option->defchoice) == 0) {
456 if (markedChoiceNotAvailable) {
460 setPpdOptionFromCombo();
463 if (choicesCb->
count() > 1) {
472 choicesCbWithLabelLayout->
addWidget(choicesCb);
473 choicesCbWithLabelLayout->
addWidget(warningLabel);
476 groupLayout->
addRow(optionLabel, choicesCbWithLabel);
477 anyWidgetCreated =
true;
480 m_advancedOptionsCombos << choicesCb;
498 widget.scrollArea->setWidget(holdingWidget);
501 return anyWidgetCreated;
504void QPrintPropertiesDialog::setPrinterAdvancedCupsOptions()
const
506 for (
const QComboBox *choicesCb : m_advancedOptionsCombos) {
507 const ppd_option_t *
option = qvariant_cast<const ppd_option_t *>(choicesCb->
property(ppdOptionProperty));
513 const char *selectedChoice =
option->choices[selectedChoiceIndex].choice;
523void QPrintPropertiesDialog::revertAdvancedOptionsToSavedValues()
const
525 for (
QComboBox *choicesCb : m_advancedOptionsCombos) {
526 const int originallySelectedChoice = qvariant_cast<int>(choicesCb->
property(ppdOriginallySelectedChoiceProperty));
527 const int newComboIndexToSelect = choicesCb->
findData(originallySelectedChoice);
531 widget.conflictsLabel->setVisible(anyPpdOptionConflict());
534void QPrintPropertiesDialog::advancedOptionsUpdateSavedValues()
const
536 for (
QComboBox *choicesCb : m_advancedOptionsCombos)
537 choicesCb->
setProperty(ppdOriginallySelectedChoiceProperty, choicesCb->currentData());
540bool QPrintPropertiesDialog::anyPpdOptionConflict()
const
543 const bool pageSetupConflicts = widget.pageSetup->hasPpdConflict();
544 const bool advancedOptionConflicts = anyAdvancedOptionConflict();
545 return pageSetupConflicts || advancedOptionConflicts;
548bool QPrintPropertiesDialog::anyAdvancedOptionConflict()
const
552 bool anyConflicted =
false;
554 for (
const QComboBox *choicesCb : m_advancedOptionsCombos) {
555 const ppd_option_t *
option = qvariant_cast<const ppd_option_t *>(choicesCb->
property(ppdOptionProperty));
556 QLabel *warningLabel = qvariant_cast<QLabel *>(choicesCb->
property(warningLabelProperty));
558 anyConflicted =
true;
566 return anyConflicted;
602 options.color->setIcon(
QIcon(
":/qt-project.org/dialogs/qprintdialog/images/status-color.png"_L1));
604 options.grayscale->setIcon(
QIcon(
":/qt-project.org/dialogs/qprintdialog/images/status-gray-scale.png"_L1));
612 delete options.pagesRadioButton;
614 options.pagesRadioButton =
nullptr;
615 options.pagesLineEdit =
nullptr;
618 top->d->setOptionsPane(
this);
623 bottom->setVisible(
false);
626 printButton->
setText(QPrintDialog::tr(
"&Print"));
634#if !QT_CONFIG(messagebox)
668 const auto supportedDuplexMode =
top->d->m_currentPrintDevice.supportedDuplexModes();
673 options.color->setChecked(
true);
675 options.grayscale->setChecked(
true);
681 if (explicitDuplexMode !=
QPrint::DuplexAuto && supportedDuplexMode.contains(explicitDuplexMode))
682 duplex = explicitDuplexMode;
687 options.noDuplex->setChecked(
true);
break;
690 options.duplexLong->setChecked(
true);
break;
692 options.duplexShort->setChecked(
true);
break;
694 options.copies->setValue(
p->copyCount());
695 options.collate->setChecked(
p->collateCopies());
699 ||
options.printCurrentPage->isChecked())
701 options.pageSetCombo->setEnabled(
false);
703 options.pageSetCombo->setEnabled(
true);
718void QPrintDialogPrivate::updatePpdDuplexOption(
QRadioButton *radio)
726 const bool conflict = checked &&
top->d->m_duplexPpdOption &&
top->d->m_duplexPpdOption->conflicted;
734 explicitDuplexMode = duplexMode;
740 top->d->setupPrinter();
746 if (
options.duplex->isEnabled()) {
747 if (
options.noDuplex->isChecked())
749 else if (
options.duplexLong->isChecked())
764 if (
options.printAll->isChecked()) {
767 }
else if (
options.printSelection->isChecked()) {
770 }
else if (
options.printCurrentPage->isChecked()) {
773 }
else if (
options.printRange->isChecked()) {
786 if (
options.pagesRadioButton->isChecked()) {
790 p->setPageRanges(ranges);
803 && (
q->fromPage() % 2 == 0)) {
827 p->setCopyCount(
options.copies->value());
828 p->setCollateCopies(
options.collate->isChecked());
836 options.pageSetCombo->setDisabled(checked);
841 int collapseHeight = 0;
846 collapseHeight = widgetToHide->
y() + widgetToHide->
height() - (
top->y() +
top->height());
852 q->layout()->activate();
853 q->resize(
QSize(
q->width(),
q->height() - collapseHeight) );
857#if QT_CONFIG(messagebox)
858void QPrintDialogPrivate::_q_checkFields()
861 if (
top->d->checkFields())
883 options.pageSetCombo->setVisible(
false);
884 options.pageSetLabel->setVisible(
false);
886 options.pageSetCombo->setVisible(
true);
887 options.pageSetLabel->setVisible(
true);
893 options.gbPrintRange->setVisible(
true);
894 options.printRange->setEnabled(
true);
898 switch (
q->printRange()) {
900 options.printAll->setChecked(
true);
901 options.pageSetCombo->setEnabled(
true);
904 options.printSelection->setChecked(
true);
905 options.pageSetCombo->setEnabled(
false);
908 options.printRange->setChecked(
true);
909 options.pageSetCombo->setEnabled(
true);
913 options.printCurrentPage->setChecked(
true);
914 options.pageSetCombo->setEnabled(
false);
921 const int maxPage =
qMax(1,
q->maxPage() == INT_MAX ? 9999 :
q->maxPage());
928 options.from->setValue(
q->fromPage());
930 top->d->updateWidget();
993#if QT_CONFIG(cups) && QT_CONFIG(messagebox)
994 if (
d->options.pagesRadioButton->isChecked() &&
printer()->pageRanges().isEmpty()) {
996 tr(
"%1 does not follow the correct syntax. Please use ',' to separate "
997 "ranges and pages, '-' to define ranges and make sure ranges do "
998 "not intersect with each other.").
arg(
d->options.pagesLineEdit->text()),
1002 if (
d->top->d->m_duplexPpdOption &&
d->top->d->m_duplexPpdOption->conflicted) {
1004 tr(
"There are conflicts in duplex settings. Do you want to fix them?"),
1025#if defined (Q_OS_UNIX)
1038 q = qobject_cast<QPrintDialog*> (
parent->parent());
1042 int currentPrinterIndex = 0;
1048 widget.printers->addItems(printers);
1051 const int idx = printers.indexOf(selectedPrinter);
1054 currentPrinterIndex = idx;
1058#if QT_CONFIG(filesystemmodel) && QT_CONFIG(completer)
1063 _q_printerChanged(currentPrinterIndex);
1077 if (printToFile && !filePrintersAdded) {
1078 if (
widget.printers->count())
1079 widget.printers->insertSeparator(
widget.printers->count());
1080 widget.printers->addItem(QPrintDialog::tr(
"Print to File (PDF)"));
1081 filePrintersAdded =
true;
1082 if (
widget.printers->count() == 1)
1085 if (!printToFile && filePrintersAdded) {
1086 widget.printers->removeItem(
widget.printers->count()-1);
1087 widget.printers->removeItem(
widget.printers->count()-1);
1088 if (
widget.printers->count())
1089 widget.printers->removeItem(
widget.printers->count()-1);
1090 filePrintersAdded =
false;
1096 widget.printers->setCurrentIndex(
widget.printers->count() - 1);
1097 widget.filename->setEnabled(
true);
1098 widget.lOutput->setEnabled(
true);
1101 widget.filename->setVisible(printToFile);
1102 widget.lOutput->setVisible(printToFile);
1103 widget.fileBrowser->setVisible(printToFile);
1117 const int printerCount =
widget.printers->count();
1118 widget.filename->setEnabled(
false);
1119 widget.lOutput->setEnabled(
false);
1128 m_duplexPpdOption =
nullptr;
1131 if (filePrintersAdded) {
1133 if (
index == printerCount - 1) {
1134 widget.location->setText(QPrintDialog::tr(
"Local file"));
1135 widget.type->setText(QPrintDialog::tr(
"Write PDF file"));
1136 widget.properties->setEnabled(
true);
1137 widget.filename->setEnabled(
true);
1139 widget.filename->setText(filename);
1140 widget.lOutput->setEnabled(
true);
1181#if QT_CONFIG(filedialog)
1188 widget.filename->setText(filename);
1189 widget.printers->setCurrentIndex(
widget.printers->count() - 1);
1193#if QT_CONFIG(messagebox)
1196 if (
widget.filename->isEnabled()) {
1201 bool opened =
false;
1204 QPrintDialog::tr(
"%1 is a directory.\nPlease choose a different file name.").arg(
file));
1208 QPrintDialog::tr(
"File %1 is not writable.\nPlease choose a different file name.").arg(
file));
1210 }
else if (exists) {
1212 QPrintDialog::tr(
"%1 already exists.\nDo you want to overwrite it?").arg(
file),
1235 QPrintDialog::tr(
"Options 'Pages Per Sheet' and 'Page Set' cannot be used together.\nPlease turn one of those options off."));
1254 && (
widget.printers->currentIndex() ==
widget.printers->count() - 1)) {
1258 printerName =
widget.printers->currentText();
1284 optionsPane->updatePpdDuplexOption(optionsPane->
options.noDuplex);
1285 optionsPane->updatePpdDuplexOption(optionsPane->
options.duplexLong);
1286 optionsPane->updatePpdDuplexOption(optionsPane->
options.duplexShort);
1292 const int printerCount =
widget.printers->count();
1293 const int index =
widget.printers->currentIndex();
1295 if (filePrintersAdded &&
index == printerCount - 1) {
1335#if QT_CONFIG(regularexpression)
1338 if (
match.hasMatch())
1339 cur +=
match.captured(1);
1347 d->widget.filename->setText(cur);
1353 const int i =
d->widget.printers->findText(printerName);
1355 d->widget.printers->setCurrentIndex(
i);
1386#include "moc_qprintdialog.cpp"
1387#include "qprintdialog_unix.moc"
The QAbstractPrintDialog class provides a base implementation for print dialogs used to configure pri...
QPrinter * printer() const
Returns the printer that this printer dialog operates on.
static QStyle * style()
Returns the application's style object.
void addWidget(QWidget *, int stretch=0, Qt::Alignment alignment=Qt::Alignment())
Adds widget to the end of this box layout, with a stretch factor of stretch and alignment alignment.
static void setPageSet(QPrinter *printer, const PageSet pageSet)
static void setCupsOption(QPrinter *printer, const QString &option, const QString &value)
static void clearCupsOptions(QPrinter *printer)
static ppd_option_t * findPpdOption(const char *optionName, QPrintDevice *printDevice)
static void setPageRange(QPrinter *printer, int pageFrom, int pageTo)
The QComboBox widget is a combined button and popup list.
int findData(const QVariant &data, int role=Qt::UserRole, Qt::MatchFlags flags=static_cast< Qt::MatchFlags >(Qt::MatchExactly|Qt::MatchCaseSensitive)) const
Returns the index of the item containing the given data for the given role; otherwise returns -1.
int count
the number of items in the combobox
void addItem(const QString &text, const QVariant &userData=QVariant())
Adds an item to the combobox with the given text, and containing the specified userData (stored in th...
void currentIndexChanged(int index)
QSize sizeHint() const override
\reimp
QVariant currentData
the data for the current item
void setCurrentIndex(int index)
The QCompleter class provides completions based on an item model.
The QDialog class is the base class of dialog windows.
virtual void reject()
Hides the modal dialog and sets the result code to Rejected.
virtual int exec()
Shows the dialog as a \l{QDialog::Modal Dialogs}{modal dialog}, blocking until the user closes it.
void showEvent(QShowEvent *) override
\reimp
virtual void accept()
Hides the modal dialog and sets the result code to Accepted.
static bool isRelativePath(const QString &path)
Returns true if path is relative; returns false if it is absolute.
static QChar separator()
Returns the native directory separator: "/" under Unix and "\\" under Windows.
static QString homePath()
Returns the absolute path of the user's home directory.
static QString currentPath()
Returns the absolute path of the application's current directory.
static QString getSaveFileName(QWidget *parent=nullptr, const QString &caption=QString(), const QString &dir=QString(), const QString &filter=QString(), QString *selectedFilter=nullptr, Options options=Options())
This is a convenience static function that will return a file name selected by the user.
\inmodule QtCore \reentrant
bool isDir() const
Returns true if this object points to a directory or to a symbolic link to a directory.
bool isWritable() const
Returns true if the user can write to the file; otherwise returns false.
bool exists() const
Returns true if the file exists; otherwise returns false.
The QFileSystemModel class provides a data model for the local filesystem.
QModelIndex setRootPath(const QString &path)
Sets the directory that is being watched by the model to newPath by installing a \l{QFileSystemWatche...
The QGroupBox widget provides a group box frame with a title.
QString platformName
The name of the underlying platform plugin.
The QHBoxLayout class lines up widgets horizontally.
The QIcon class provides scalable icons in different modes and states.
QPixmap pixmap(const QSize &size, Mode mode=Normal, State state=Off) const
Returns a pixmap with the requested size, mode, and state, generating one if necessary.
The QLabel widget provides a text or image display.
void setPixmap(const QPixmap &)
void addWidget(QWidget *w)
Adds widget w to this layout in a manner specific to the layout.
void setContentsMargins(int left, int top, int right, int bottom)
const_iterator constEnd() const noexcept
static StandardButton warning(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons=Ok, StandardButton defaultButton=NoButton)
static StandardButton critical(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons=Ok, StandardButton defaultButton=NoButton)
static StandardButton question(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons=StandardButtons(Yes|No), StandardButton defaultButton=NoButton)
QObject * parent() const
Returns a pointer to the parent object.
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
QVariant property(const char *name) const
Returns the value of the object's name property.
bool setProperty(const char *name, const QVariant &value)
Sets the value of the object's name property to value.
QString makeAndModel() const
bool setProperty(PrintDevicePropertyKey key, const QVariant &value)
void selectPrinter(const QPrinter::OutputFormat outputFormat)
QPushButton * collapseButton
void _q_togglePageSetCombo(bool)
virtual void setTabs(const QList< QWidget * > &tabs) override
Ui::QPrintSettingsOutput options
void _q_collapseOrExpandDialog()
QPrinter::OutputFormat printerOutputFormat
QDialogButtonBox * buttons
The QPrintDialog class provides a dialog for specifying the printer's configuration.
int exec() override
\reimp
~QPrintDialog()
Destroys the print dialog.
QPrintDialog(QPrinter *printer, QWidget *parent=nullptr)
Constructs a new modal printer dialog for the given printer with the given parent.
QPrintPropertiesDialog(QPrinter *printer, QPrintDevice *currentPrintDevice, QPrinter::OutputFormat outputFormat, const QString &printerName, QAbstractPrintDialog *parent)
~QPrintPropertiesDialog()
void setupPrinter() const
void showEvent(QShowEvent *event) override
\reimp
OutputFormat
The OutputFormat enum is used to describe the format QPrinter should use for printing.
void setOutputFormat(OutputFormat format)
QString docName() const
Returns the document name.
void setDuplex(DuplexMode duplex)
QString outputFileName() const
Returns the name of the output file.
void setOutputFileName(const QString &)
Sets the name of the output file to fileName.
QString printerName() const
Returns the printer name.
OutputFormat outputFormat() const
void setPrinterName(const QString &)
Sets the printer name to name.
\inmodule QtCore \reentrant
The QShowEvent class provides an event that is sent when a widget is shown.
constexpr int height() const noexcept
Returns the height.
\macro QT_RESTRICTED_CAST_FROM_ASCII
bool startsWith(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Returns true if the string starts with s; otherwise returns false.
static QString fromLatin1(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
void clear()
Clears the contents of the string and makes it null.
bool endsWith(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Returns true if the string ends with s; otherwise returns false.
bool isEmpty() const
Returns true if the string has no characters; otherwise returns false.
virtual QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option=nullptr, const QWidget *widget=nullptr) const =0
The QVBoxLayout class lines up widgets vertically.
int toInt(bool *ok=nullptr) const
Returns the variant as an int if the variant has userType() \l QMetaType::Int, \l QMetaType::Bool,...
static auto fromValue(T &&value) noexcept(std::is_nothrow_copy_constructible_v< T > &&Private::CanUseInternalSpace< T >) -> std::enable_if_t< std::conjunction_v< std::is_copy_constructible< T >, std::is_destructible< T > >, QVariant >
Combined button and popup list for selecting options.
Q_CORE_EXPORT int qstrcmp(const char *str1, const char *str2)
#define Q_DECLARE_TR_FUNCTIONS(context)
#define PDPK_PpdChoiceIsInstallableConflict
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter * iter
constexpr const T & qMin(const T &a, const T &b)
constexpr const T & qMax(const T &a, const T &b)
Qt::MouseButtons m_buttons
GLenum GLsizei GLsizei GLint * values
[15]
GLdouble GLdouble GLdouble GLdouble top
GLdouble GLdouble GLdouble GLdouble q
GLsizei const GLchar *const * path
static void _q_pdu_initResources()
#define QStringLiteral(str)
#define QT_CONFIG(feature)
static QT_BEGIN_NAMESPACE void init(QTextBoundaryFinder::BoundaryType type, QStringView str, QCharAttributes *attributes)
static bool match(const uchar *found, uint foundLen, const char *target, uint targetLen)
#define Q_INIT_RESOURCE(name)
if(qFloatDistance(a, b)<(1<< 7))
[0]
QFileInfo fi("c:/temp/foo")
[newstuff]
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent