Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qplatformdialoghelper.cpp
Go to the documentation of this file.
1// Copyright (C) 2018 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
5
6#include <QtCore/QCoreApplication>
7#include <QtCore/QList>
8#if QT_CONFIG(regularexpression)
9#include <QtCore/QRegularExpression>
10#endif
11#if QT_CONFIG(settings)
12#include <QtCore/QSettings>
13#endif
14#include <QtCore/QSharedData>
15#include <QtCore/QUrl>
16#include <QtCore/QVariant>
17#include <QtGui/QColor>
18#include <QtGui/QPixmap>
19
20#include <algorithm>
21
23
24using namespace Qt::StringLiterals;
25
27 QPlatformDialogHelper__StandardButton)
29 QPlatformDialogHelper__ButtonRole)
30
31
53static const int buttonRoleLayouts[2][6][14] =
54{
55 // Qt::Horizontal
56 {
57 // WinLayout
62
63 // MacLayout
69
70 // KdeLayout
74
75 // GnomeLayout
81
82 // AndroidLayout (neutral, stretch, dismissive, affirmative)
83 // https://material.io/guidelines/components/dialogs.html#dialogs-specs
89 },
90
91 // Qt::Vertical
92 {
93 // WinLayout
97
98 // MacLayout
102
103 // KdeLayout
107
108 // GnomeLayout
112
113 // AndroidLayout
114 // (affirmative
115 // dismissive
116 // neutral)
117 // https://material.io/guidelines/components/dialogs.html#dialogs-specs
121 }
122};
123
124
126{
127 qRegisterMetaType<StandardButton>();
128 qRegisterMetaType<ButtonRole>();
129}
130
132{
133}
134
136{
138}
139
141{
142 Q_UNUSED(hint);
143 return QVariant();
144}
145
146// Font dialog
147
149{
150public:
152
153 QFontDialogOptions::FontDialogOptions options;
155};
156
158 : d(dd)
159{
160}
161
163{
164}
165
166namespace {
167 struct FontDialogCombined : QFontDialogOptionsPrivate, QFontDialogOptions
168 {
169 FontDialogCombined() : QFontDialogOptionsPrivate(), QFontDialogOptions(this) {}
170 FontDialogCombined(const FontDialogCombined &other)
172 };
173}
174
175// static
177{
179}
180
182{
183 return QSharedPointer<FontDialogCombined>::create(*static_cast<const FontDialogCombined*>(this));
184}
185
187{
188 return d->windowTitle;
189}
190
192{
193 d->windowTitle = title;
194}
195
197{
198 if (!(d->options & option) != !on)
200}
201
203{
204 return d->options & option;
205}
206
207void QFontDialogOptions::setOptions(FontDialogOptions options)
208{
209 if (options != d->options)
210 d->options = options;
211}
212
213QFontDialogOptions::FontDialogOptions QFontDialogOptions::options() const
214{
215 return d->options;
216}
217
228{
229 return m_options;
230}
231
233{
234 m_options = options;
235}
236
237// Color dialog
238
240{
241public:
242 enum { CustomColorCount = 16, StandardColorCount = 6 * 8 };
243
245 inline void readSettings();
246 inline void writeSettings() const;
247
251};
252
254{
255 int i = 0;
256 for (int g = 0; g < 4; ++g)
257 for (int r = 0; r < 4; ++r)
258 for (int b = 0; b < 3; ++b)
259 standardRgb[i++] = qRgb(r * 255 / 3, g * 255 / 3, b * 255 / 2);
260 std::fill(customRgb, customRgb + CustomColorCount, 0xffffffff);
261 readSettings();
262}
263
265{
266#if QT_CONFIG(settings)
268 for (int i = 0; i < int(CustomColorCount); ++i) {
269 const QVariant v = settings.value("Qt/customColors/"_L1 + QString::number(i));
270 if (v.isValid())
271 customRgb[i] = v.toUInt();
272 }
273#endif
274}
275
277{
278#if QT_CONFIG(settings)
279 if (customSet) {
280 const_cast<QColorDialogStaticData*>(this)->customSet = false;
282 for (int i = 0; i < int(CustomColorCount); ++i)
283 settings.setValue("Qt/customColors/"_L1 + QString::number(i), customRgb[i]);
284 }
285#endif
286}
287
288Q_GLOBAL_STATIC(QColorDialogStaticData, qColorDialogStaticData)
289
291{
292public:
294 // Write out settings around destruction of dialogs
295 ~QColorDialogOptionsPrivate() { qColorDialogStaticData()->writeSettings(); }
296
297 QColorDialogOptions::ColorDialogOptions options;
299};
300
301QColorDialogOptions::QColorDialogOptions(QColorDialogOptionsPrivate *dd)
302 : d(dd)
303{
304}
305
306QColorDialogOptions::~QColorDialogOptions()
307{
308}
309
310namespace {
311 struct ColorDialogCombined : QColorDialogOptionsPrivate, QColorDialogOptions
312 {
313 ColorDialogCombined() : QColorDialogOptionsPrivate(), QColorDialogOptions(this) {}
314 ColorDialogCombined(const ColorDialogCombined &other)
315 : QColorDialogOptionsPrivate(other), QColorDialogOptions(this) {}
316 };
317}
318
319// static
320QSharedPointer<QColorDialogOptions> QColorDialogOptions::create()
321{
323}
324
325QSharedPointer<QColorDialogOptions> QColorDialogOptions::clone() const
326{
327 return QSharedPointer<ColorDialogCombined>::create(*static_cast<const ColorDialogCombined*>(this));
328}
329
330QString QColorDialogOptions::windowTitle() const
331{
332 return d->windowTitle;
333}
334
335void QColorDialogOptions::setWindowTitle(const QString &title)
336{
337 d->windowTitle = title;
338}
339
340void QColorDialogOptions::setOption(QColorDialogOptions::ColorDialogOption option, bool on)
341{
342 if (!(d->options & option) != !on)
343 setOptions(d->options ^ option);
344}
345
346bool QColorDialogOptions::testOption(QColorDialogOptions::ColorDialogOption option) const
347{
348 return d->options & option;
349}
350
351void QColorDialogOptions::setOptions(ColorDialogOptions options)
352{
353 if (options != d->options)
354 d->options = options;
355}
356
357QColorDialogOptions::ColorDialogOptions QColorDialogOptions::options() const
358{
359 return d->options;
360}
361
362int QColorDialogOptions::customColorCount()
363{
365}
366
367QRgb QColorDialogOptions::customColor(int index)
368{
370 return qRgb(255, 255, 255);
371 return qColorDialogStaticData()->customRgb[index];
372}
373
374QRgb *QColorDialogOptions::customColors()
375{
376 return qColorDialogStaticData()->customRgb;
377}
378
379void QColorDialogOptions::setCustomColor(int index, QRgb color)
380{
382 return;
383 qColorDialogStaticData()->customSet = true;
384 qColorDialogStaticData()->customRgb[index] = color;
385}
386
387QRgb *QColorDialogOptions::standardColors()
388{
389 return qColorDialogStaticData()->standardRgb;
390}
391
392QRgb QColorDialogOptions::standardColor(int index)
393{
395 return qRgb(255, 255, 255);
396 return qColorDialogStaticData()->standardRgb[index];
397}
398
399void QColorDialogOptions::setStandardColor(int index, QRgb color)
400{
402 return;
403 qColorDialogStaticData()->standardRgb[index] = color;
404}
405
416{
417 return m_options;
418}
419
421{
422 m_options = options;
423}
424
425// File dialog
426
428{
429public:
430 QFileDialogOptions::FileDialogOptions options;
432
449};
450
452 : d(dd)
453{
454}
455
457{
458}
459
460namespace {
461 struct FileDialogCombined : QFileDialogOptionsPrivate, QFileDialogOptions
462 {
463 FileDialogCombined() : QFileDialogOptionsPrivate(), QFileDialogOptions(this) {}
464 FileDialogCombined(const FileDialogCombined &other) : QFileDialogOptionsPrivate(other), QFileDialogOptions(this) {}
465 };
466}
467
468// static
470{
472}
473
475{
476 return QSharedPointer<FileDialogCombined>::create(*static_cast<const FileDialogCombined*>(this));
477}
478
480{
481 return d->windowTitle;
482}
483
485{
486 d->windowTitle = title;
487}
488
490{
491 if (!(d->options & option) != !on)
493}
494
496{
497 return d->options & option;
498}
499
500void QFileDialogOptions::setOptions(FileDialogOptions options)
501{
502 if (options != d->options)
503 d->options = options;
504}
505
506QFileDialogOptions::FileDialogOptions QFileDialogOptions::options() const
507{
508 return d->options;
509}
510
511QDir::Filters QFileDialogOptions::filter() const
512{
513 return d->filters;
514}
515
517{
518 d->filters = filters;
519}
520
522{
523 d->viewMode = mode;
524}
525
527{
528 return d->viewMode;
529}
530
532{
533 d->fileMode = mode;
534}
535
537{
538 return d->fileMode;
539}
540
542{
543 d->acceptMode = mode;
544}
545
547{
548 return d->acceptMode;
549}
550
552{
553 d->sidebarUrls = urls;
554}
555
557{
558 return d->sidebarUrls;
559}
560
571{
572 return d->useDefaultNameFilters;
573}
574
576{
577 d->useDefaultNameFilters = dnf;
578}
579
581{
582 d->useDefaultNameFilters = filters.size() == 1
584 d->nameFilters = filters;
585}
586
588{
589 return d->useDefaultNameFilters ?
591}
592
601{
602 return QCoreApplication::translate("QFileDialog", "All Files (*)");
603}
604
606{
608}
609
611{
612 return d->mimeTypeFilters;
613}
614
616{
617 d->defaultSuffix = suffix;
618 if (d->defaultSuffix.size() > 1 && d->defaultSuffix.startsWith(u'.'))
619 d->defaultSuffix.remove(0, 1); // Silently change ".txt" -> "txt".
620}
621
623{
624 return d->defaultSuffix;
625}
626
628{
629 d->history = paths;
630}
631
633{
634 return d->history;
635}
636
638{
639 if (unsigned(label) < unsigned(DialogLabelCount))
640 d->labels[label] = text;
641}
642
644{
645 return (unsigned(label) < unsigned(DialogLabelCount)) ? d->labels[label] : QString();
646}
647
649{
650 return unsigned(label) < unsigned(DialogLabelCount) && !d->labels[label].isEmpty();
651}
652
654{
655 return d->initialDirectory;
656}
657
659{
661}
662
664{
666}
667
669{
671}
672
674{
676}
677
679{
681}
682
684{
685 return d->initiallySelectedFiles;
686}
687
689{
691}
692
693// Schemes supported by the application
695{
696 d->supportedSchemes = schemes;
697}
698
700{
701 return d->supportedSchemes;
702}
703
705{
707}
708
710{
711 return QString();
712}
713
714// Return true if the URL is supported by the filedialog implementation *and* by the application.
716{
717 return url.isLocalFile();
718}
719
730{
731 return m_options;
732}
733
735{
736 m_options = options;
737}
738
740"^(.*)\\(([a-zA-Z0-9_.,*? +;#\\-\\[\\]@\\{\\}/!<>\\$%&=^~:\\|]*)\\)$";
741
742// Makes a list of filters from a normal filter string "Image Files (*.png *.jpg)"
744{
745#if QT_CONFIG(regularexpression)
747 Q_ASSERT(regexp.isValid());
748 QString f = filter;
750 if (match.hasMatch())
751 f = match.captured(2);
752 return f.split(u' ', Qt::SkipEmptyParts);
753#else
755 return QStringList();
756#endif
757}
758
759// Message dialog
760
762{
763public:
768 {}
769
775 QPlatformDialogHelper::StandardButtons buttons;
781 QMessageDialogOptions::Options options;
782};
783
785 : d(dd)
786{
787}
788
790{
791}
792
793namespace {
794 struct MessageDialogCombined : QMessageDialogOptionsPrivate, QMessageDialogOptions
795 {
796 MessageDialogCombined() : QMessageDialogOptionsPrivate(), QMessageDialogOptions(this) {}
797 MessageDialogCombined(const MessageDialogCombined &other)
799 };
800}
801
802// static
804{
806}
807
809{
810 return QSharedPointer<MessageDialogCombined>::create(*static_cast<const MessageDialogCombined*>(this));
811}
812
814{
815 return d->windowTitle;
816}
817
819{
820 d->windowTitle = title;
821}
822
824{
825 return d->icon;
826}
827
829{
830 d->icon = icon;
831}
832
834{
835 d->iconPixmap = pixmap;
836}
837
839{
840 return d->iconPixmap;
841}
842
844{
845 return d->text;
846}
847
849{
850 d->text = text;
851}
852
854{
855 return d->informativeText;
856}
857
859{
861}
862
864{
865 return d->detailedText;
866}
867
869{
871}
872
873void QMessageDialogOptions::setStandardButtons(QPlatformDialogHelper::StandardButtons buttons)
874{
875 d->buttons = buttons;
876}
877
878QPlatformDialogHelper::StandardButtons QMessageDialogOptions::standardButtons() const
879{
880 return d->buttons;
881}
882
884 void *buttonImpl)
885{
886 const CustomButton b(d->nextCustomButtonId++, label, role, buttonImpl);
888 return b.id;
889}
890
893 return a.id == b.id;
894}
895
897{
899}
900
902{
903 return d->customButtons;
904}
905
907{
908 const int i = int(d->customButtons.indexOf(CustomButton(id)));
909 return (i < 0 ? nullptr : &d->customButtons.at(i));
910}
911
913{
914 d->checkBoxLabel = label;
915 d->checkBoxState = state;
916}
917
919{
920 return d->checkBoxLabel;
921}
922
924{
925 return d->checkBoxState;
926}
927
929{
930 if (!(d->options & option) != !on)
932}
933
935{
936 return d->options & option;
937}
938
939void QMessageDialogOptions::setOptions(QMessageDialogOptions::Options options)
940{
941 if (options != d->options)
942 d->options = options;
943}
944
945QMessageDialogOptions::Options QMessageDialogOptions::options() const
946{
947 return d->options;
948}
949
950
952{
953 switch (button) {
954 case Ok:
955 case Save:
956 case Open:
957 case SaveAll:
958 case Retry:
959 case Ignore:
960 return AcceptRole;
961
962 case Cancel:
963 case Close:
964 case Abort:
965 return RejectRole;
966
967 case Discard:
968 return DestructiveRole;
969
970 case Help:
971 return HelpRole;
972
973 case Apply:
974 return ApplyRole;
975
976 case Yes:
977 case YesToAll:
978 return YesRole;
979
980 case No:
981 case NoToAll:
982 return NoRole;
983
984 case RestoreDefaults:
985 case Reset:
986 return ResetRole;
987
988 default:
989 break;
990 }
991 return InvalidRole;
992}
993
995{
996 if (policy == UnknownLayout) {
997#if defined (Q_OS_MACOS)
999#elif defined (Q_OS_LINUX) || defined (Q_OS_UNIX)
1000 policy = KdeLayout;
1001#elif defined (Q_OS_ANDROID)
1003#else
1004 policy = WinLayout;
1005#endif
1006 }
1007 return buttonRoleLayouts[orientation == Qt::Vertical][policy];
1008}
1009
1020{
1021 return m_options;
1022}
1023
1025{
1026 m_options = options;
1027}
1028
1030
1031#include "moc_qplatformdialoghelper.cpp"
QColorDialogOptionsPrivate()=default
QColorDialogOptions::ColorDialogOptions options
QRgb standardRgb[StandardColorCount]
QRgb customRgb[CustomColorCount]
static QString translate(const char *context, const char *key, const char *disambiguation=nullptr, int n=-1)
\threadsafe
@ AllEntries
Definition qdir.h:25
@ AllDirs
Definition qdir.h:39
@ NoDotAndDotDot
Definition qdir.h:43
QFileDialogOptions::FileDialogOptions options
QString labels[QFileDialogOptions::DialogLabelCount]
QFileDialogOptions::ViewMode viewMode
QFileDialogOptions::AcceptMode acceptMode
QFileDialogOptions::FileMode fileMode
QStringList mimeTypeFilters() const
QList< QUrl > initiallySelectedFiles() const
void setHistory(const QStringList &paths)
bool isLabelExplicitlySet(DialogLabel label)
void setSupportedSchemes(const QStringList &schemes)
QDir::Filters filter() const
QSharedPointer< QFileDialogOptions > clone() const
QString initiallySelectedNameFilter() const
void setWindowTitle(const QString &)
QString labelText(DialogLabel label) const
void setNameFilters(const QStringList &filters)
void setOptions(FileDialogOptions options)
QStringList supportedSchemes() const
AcceptMode acceptMode() const
void setInitiallySelectedNameFilter(const QString &)
void setInitiallySelectedMimeTypeFilter(const QString &)
QList< QUrl > sidebarUrls() const
void setViewMode(ViewMode mode)
void setMimeTypeFilters(const QStringList &filters)
QStringList nameFilters() const
FileDialogOptions options() const
void setLabelText(DialogLabel label, const QString &text)
QStringList history() const
static QSharedPointer< QFileDialogOptions > create()
void setFileMode(FileMode mode)
void setOption(FileDialogOption option, bool on=true)
QFileDialogOptions(QFileDialogOptionsPrivate *dd)
QString initiallySelectedMimeTypeFilter() const
void setAcceptMode(AcceptMode mode)
void setSidebarUrls(const QList< QUrl > &urls)
void setInitialDirectory(const QUrl &)
void setFilter(QDir::Filters filters)
bool testOption(FileDialogOption option) const
static QString defaultNameFilterString()
void setDefaultSuffix(const QString &suffix)
void setInitiallySelectedFiles(const QList< QUrl > &)
QFontDialogOptions::FontDialogOptions options
QFontDialogOptionsPrivate()=default
void setOptions(FontDialogOptions options)
QFontDialogOptions(QFontDialogOptionsPrivate *dd)
QSharedPointer< QFontDialogOptions > clone() const
void setWindowTitle(const QString &)
bool testOption(FontDialogOption option) const
static QSharedPointer< QFontDialogOptions > create()
FontDialogOptions options() const
void setOption(FontDialogOption option, bool on=true)
Definition qlist.h:74
bool removeOne(const AT &t)
Definition qlist.h:581
void append(parameter_type t)
Definition qlist.h:441
QList< QMessageDialogOptions::CustomButton > customButtons
QPlatformDialogHelper::StandardButtons buttons
QMessageDialogOptions::StandardIcon icon
QMessageDialogOptions::Options options
StandardIcon standardIcon() const
bool testOption(Option option) const
void setWindowTitle(const QString &)
void setOptions(Options options)
static QSharedPointer< QMessageDialogOptions > create()
void setInformativeText(const QString &text)
Qt::CheckState checkBoxState() const
void setDetailedText(const QString &text)
void setText(const QString &text)
void setStandardButtons(QPlatformDialogHelper::StandardButtons buttons)
const CustomButton * customButton(int id)
const QList< CustomButton > & customButtons()
void setCheckBox(const QString &label, Qt::CheckState state)
QPlatformDialogHelper::StandardButtons standardButtons() const
QMessageDialogOptions(QMessageDialogOptionsPrivate *dd)
void setOption(Option option, bool on=true)
QSharedPointer< QMessageDialogOptions > clone() const
void setStandardIcon(StandardIcon icon)
void setIconPixmap(const QPixmap &pixmap)
int addButton(const QString &label, QPlatformDialogHelper::ButtonRole role, void *buttonImpl=nullptr)
Returns a copy of the pixmap that is transformed using the given transformation transform and transfo...
Definition qpixmap.h:27
const QSharedPointer< QColorDialogOptions > & options() const
void setOptions(const QSharedPointer< QColorDialogOptions > &options)
The QPlatformDialogHelper class allows for platform-specific customization of dialogs.
static QVariant defaultStyleHint(QPlatformDialogHelper::StyleHint hint)
StyleHint
This enum type specifies platform-specific style hints.
static const int * buttonLayout(Qt::Orientation orientation=Qt::Horizontal, ButtonLayout policy=UnknownLayout)
static ButtonRole buttonRole(StandardButton button)
virtual QVariant styleHint(StyleHint hint) const
void setOptions(const QSharedPointer< QFileDialogOptions > &options)
virtual bool isSupportedUrl(const QUrl &url) const
static QStringList cleanFilterList(const QString &filter)
virtual void selectMimeTypeFilter(const QString &filter)
const QSharedPointer< QFileDialogOptions > & options() const
virtual QString selectedMimeTypeFilter() const
void setOptions(const QSharedPointer< QFontDialogOptions > &options)
const QSharedPointer< QFontDialogOptions > & options() const
void setOptions(const QSharedPointer< QMessageDialogOptions > &options)
const QSharedPointer< QMessageDialogOptions > & options() const
\inmodule QtCore \reentrant
\inmodule QtCore \reentrant
bool isValid() const
Returns true if the regular expression is a valid regular expression (that is, it contains no syntax ...
QRegularExpressionMatch match(const QString &subject, qsizetype offset=0, MatchType matchType=NormalMatch, MatchOptions matchOptions=NoMatchOption) const
Attempts to match the regular expression against the given subject string, starting at the position o...
\inmodule QtCore
Definition qsettings.h:30
void setValue(QAnyStringView key, const QVariant &value)
Sets the value of setting key to value.
QVariant value(QAnyStringView key, const QVariant &defaultValue) const
Returns the value for setting key.
\inmodule QtCore
Definition qshareddata.h:19
\inmodule QtCore
static QSharedPointer create(Args &&...arguments)
This is an overloaded member function, provided for convenience. It differs from the above function o...
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
bool startsWith(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Returns true if the string starts with s; otherwise returns false.
Definition qstring.cpp:5299
static QString fromLatin1(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:5710
qsizetype size() const
Returns the number of characters in this string.
Definition qstring.h:182
bool isEmpty() const
Returns true if the string has no characters; otherwise returns false.
Definition qstring.h:1083
static QString number(int, int base=10)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:7822
QString & remove(qsizetype i, qsizetype len)
Removes n characters from the string, starting at the given position index, and returns a reference t...
Definition qstring.cpp:3435
\inmodule QtCore
Definition qurl.h:94
bool isLocalFile() const
Definition qurl.cpp:3431
\inmodule QtCore
Definition qvariant.h:64
#define this
Definition dialogs.cpp:9
QString text
QPushButton * button
[2]
else opt state
[0]
Combined button and popup list for selecting options.
CheckState
@ Unchecked
Orientation
Definition qnamespace.h:97
@ Vertical
Definition qnamespace.h:99
@ SkipEmptyParts
Definition qnamespace.h:127
@ Ok
Definition qbezier.cpp:275
#define Q_GLOBAL_STATIC(TYPE, NAME,...)
#define QT_IMPL_METATYPE_EXTERN_TAGGED(TYPE, TAG)
Definition qmetatype.h:1363
GLboolean GLboolean GLboolean b
GLsizei const GLfloat * v
[13]
GLenum mode
GLboolean GLboolean GLboolean GLboolean a
[7]
GLuint index
[2]
GLboolean r
[2]
GLfloat GLfloat f
GLsizei const GLuint * paths
GLuint GLsizei const GLchar * label
[43]
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
GLboolean GLboolean g
GLuint GLenum option
static bool operator==(const QMessageDialogOptions::CustomButton &a, const QMessageDialogOptions::CustomButton &b)
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
QT_BEGIN_NAMESPACE typedef unsigned int QRgb
Definition qrgb.h:13
constexpr QRgb qRgb(int r, int g, int b)
Definition qrgb.h:30
#define QStringLiteral(str)
static QT_BEGIN_NAMESPACE QVariant hint(QPlatformIntegration::StyleHint h)
#define Q_UNUSED(x)
static bool match(const uchar *found, uint foundLen, const char *target, uint targetLen)
unsigned int uint
Definition qtypes.h:29
QSettings settings("MySoft", "Star Runner")
[0]
QUrl url("example.com")
[constructor-url-reference]
QString title
[35]
QSharedPointer< T > other(t)
[5]
QStringList files
[8]
const QStringList filters({"Image files (*.png *.xpm *.jpg)", "Text files (*.txt)", "Any files (*)" })
[6]
widget render & pixmap
QSizePolicy policy
qsizetype indexOf(const AT &t, qsizetype from=0) const noexcept
Definition qlist.h:955