18
18
#include " qwizard_container.h"
19
19
#include " layout_propertysheet.h"
20
20
21
+ #include < QtDesigner/abstractformeditor.h>
22
+ #include < QtDesigner/abstractintegration.h>
21
23
#include < QtDesigner/private/ui4_p.h>
22
24
#include < QtDesigner/private/formbuilderextra_p.h>
23
25
#include < QtDesigner/private/resourcebuilder_p.h>
73
75
74
76
#include < QtCore/qbuffer.h>
75
77
#include < QtCore/qdir.h>
78
+ #include < QtCore/qlibraryinfo.h>
76
79
#include < QtCore/qmetaobject.h>
77
80
#include < QtCore/qdebug.h>
81
+ #include < QtCore/qversionnumber.h>
78
82
#include < QtCore/qxmlstream.h>
79
83
80
84
#include < algorithm>
@@ -99,6 +103,40 @@ static constexpr auto clipboardObjectName = "__qt_fake_top_level"_L1;
99
103
100
104
namespace qdesigner_internal {
101
105
106
+ static QVersionNumber qtVersion (const QDesignerFormEditorInterface *core)
107
+ {
108
+ const QVariant v = core->integration ()->property (" qtVersion" );
109
+ return v.isValid () && v.canConvert <QVersionNumber>()
110
+ ? v.value <QVersionNumber>() : QLibraryInfo::version ();
111
+ }
112
+
113
+ static bool supportsQualifiedEnums (const QVersionNumber &qtVersion)
114
+ {
115
+ if (qtVersion >= QVersionNumber{6 , 6 , 2 })
116
+ return true ;
117
+
118
+ switch (qtVersion.majorVersion ()) {
119
+ case 6 : // Qt 6
120
+ switch (qtVersion.minorVersion ()) {
121
+ case 5 : // 6.5 LTS
122
+ if (qtVersion.microVersion () >= 4 )
123
+ return true ;
124
+ break ;
125
+ case 2 : // 6.2 LTS
126
+ if (qtVersion.microVersion () >= 13 )
127
+ return true ;
128
+ break ;
129
+ }
130
+ break ;
131
+
132
+ case 5 : // Qt 5 LTS
133
+ if (qtVersion >= QVersionNumber{5 , 15 , 18 })
134
+ return true ;
135
+ break ;
136
+ }
137
+ return false ;
138
+ }
139
+
102
140
// -------------------- QDesignerResourceBuilder: A resource builder that works on the property sheet icon types.
103
141
class QDesignerResourceBuilder : public QResourceBuilder
104
142
{
@@ -1207,6 +1245,36 @@ DomLayout *QDesignerResource::createDom(QLayout *layout, DomLayout *ui_parentLay
1207
1245
return l;
1208
1246
}
1209
1247
1248
+ // Do not write fully qualified enumerations for spacer orientation
1249
+ // for older Qt versions since that breaks older uic
1250
+
1251
+ static void inline fixSpacerPropertyQt5 (DomProperty *p)
1252
+ {
1253
+ if (p->attributeName () == " orientation" _L1) {
1254
+ // "Qt::Orientation::Horizontal" -> "Qt::Horizontal"
1255
+ QString enumValue = p->elementEnum ();
1256
+ if (enumValue.startsWith (" Qt::Orientation::" _L1)) {
1257
+ enumValue.remove (4 , 13 );
1258
+ p->setElementEnum (enumValue);
1259
+ }
1260
+ } else if (p->attributeName () == " sizeType" _L1) {
1261
+ // "QSizePolicy::Policy::Expanding" -> "QSizePolicy::Expanding"
1262
+ QString enumValue = p->elementEnum ();
1263
+ if (enumValue.startsWith (" QSizePolicy::Policy::" _L1)) {
1264
+ enumValue.remove (13 , 8 );
1265
+ p->setElementEnum (enumValue);
1266
+ }
1267
+ }
1268
+ }
1269
+
1270
+ static void fixSpacerPropertiesQt5 (DomPropertyList *properties)
1271
+ {
1272
+ for (auto *p : *properties) {
1273
+ if (p->kind () == DomProperty::Enum)
1274
+ fixSpacerPropertyQt5 (p);
1275
+ }
1276
+ }
1277
+
1210
1278
DomLayoutItem *QDesignerResource::createDom (QLayoutItem *item, DomLayout *ui_layout, DomWidget *ui_parentWidget)
1211
1279
{
1212
1280
DomLayoutItem *ui_item = nullptr ;
@@ -1220,7 +1288,10 @@ DomLayoutItem *QDesignerResource::createDom(QLayoutItem *item, DomLayout *ui_lay
1220
1288
if (!objectName.isEmpty ())
1221
1289
spacer->setAttributeName (objectName);
1222
1290
// ### filter the properties
1223
- spacer->setElementProperty (computeProperties (item->widget ()));
1291
+ auto properties = computeProperties (item->widget ());
1292
+ if (!supportsQualifiedEnums (qtVersion (core ())))
1293
+ fixSpacerPropertiesQt5 (&properties);
1294
+ spacer->setElementProperty (properties);
1224
1295
1225
1296
ui_item = new DomLayoutItem ();
1226
1297
ui_item->setElementSpacer (spacer);
0 commit comments