Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
formwindowbase.cpp
Go to the documentation of this file.
1
// Copyright (C) 2016 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
// Qt-Security score:significant reason:default
4
5
#
include
"formwindowbase_p.h"
6
#
include
"connectionedit_p.h"
7
#
include
"qdesigner_command_p.h"
8
#
include
"qdesigner_propertysheet_p.h"
9
#
include
"qdesigner_propertyeditor_p.h"
10
#
include
"qdesigner_menu_p.h"
11
#
include
"qdesigner_menubar_p.h"
12
#
include
"shared_settings_p.h"
13
#
include
"grid_p.h"
14
#
include
"deviceprofile_p.h"
15
#
include
"qdesigner_utils_p.h"
16
#
include
"spacer_widget_p.h"
17
18
#
include
<
QtDesigner
/
abstractformeditor
.
h
>
19
#
include
<
QtDesigner
/
container
.
h
>
20
#
include
<
QtDesigner
/
qextensionmanager
.
h
>
21
#
include
<
QtDesigner
/
taskmenu
.
h
>
22
#
include
<
QtDesigner
/
abstractintegration
.
h
>
23
24
#
include
<
QtWidgets
/
qmenu
.
h
>
25
#
include
<
QtWidgets
/
qlistwidget
.
h
>
26
#
include
<
QtWidgets
/
qtreewidget
.
h
>
27
#
include
<
QtWidgets
/
qtablewidget
.
h
>
28
#
include
<
QtWidgets
/
qcombobox
.
h
>
29
#
include
<
QtWidgets
/
qtabwidget
.
h
>
30
#
include
<
QtWidgets
/
qtoolbox
.
h
>
31
#
include
<
QtWidgets
/
qtoolbar
.
h
>
32
#
include
<
QtWidgets
/
qstatusbar
.
h
>
33
#
include
<
QtWidgets
/
qmenu
.
h
>
34
#
include
<
QtWidgets
/
qlabel
.
h
>
35
36
#
include
<
QtGui
/
qaction
.
h
>
37
38
#
include
<
QtCore
/
qdebug
.
h
>
39
#
include
<
QtCore
/
qhash
.
h
>
40
#
include
<
QtCore
/
qlist
.
h
>
41
#
include
<
QtCore
/
qset
.
h
>
42
#
include
<
QtCore
/
qtimer
.
h
>
43
44
QT_BEGIN_NAMESPACE
45
46
using
namespace
Qt::StringLiterals;
47
48
namespace
qdesigner_internal
{
49
50
class
FormWindowBasePrivate
{
51
public
:
52
explicit
FormWindowBasePrivate
(QDesignerFormEditorInterface *core);
53
54
static
Grid
m_defaultGrid
;
55
56
QDesignerFormWindowInterface
::
Feature
m_feature
;
57
Grid
m_grid
;
58
bool
m_hasFormGrid
;
59
DesignerPixmapCache *
m_pixmapCache
;
60
DesignerIconCache *
m_iconCache
;
61
QtResourceSet *
m_resourceSet
;
62
QHash
<
QDesignerPropertySheet
*,
QSet
<
int
>>
m_reloadableResources
;
63
QHash
<
QDesignerPropertySheet
*,
QObject
*>
m_reloadablePropertySheets
;
64
const
DeviceProfile
m_deviceProfile
;
65
FormWindowBase
::
LineTerminatorMode
m_lineTerminatorMode
;
66
FormWindowBase
::
ResourceFileSaveMode
m_saveResourcesBehaviour
;
67
bool
m_useIdBasedTranslations
;
68
bool
m_connectSlotsByName
;
69
QString
m_idBasedTranslationLabel
;
70
};
71
72
FormWindowBasePrivate
::
FormWindowBasePrivate
(QDesignerFormEditorInterface *core) :
73
m_feature
(
QDesignerFormWindowInterface
::
DefaultFeature
),
74
m_grid
(
m_defaultGrid
),
75
m_hasFormGrid
(
false
),
76
m_pixmapCache
(
nullptr
),
77
m_iconCache
(
nullptr
),
78
m_resourceSet
(
nullptr
),
79
m_deviceProfile
(
QDesignerSharedSettings
(
core
).
currentDeviceProfile
()),
80
m_lineTerminatorMode
(
FormWindowBase
::
NativeLineTerminator
),
81
m_saveResourcesBehaviour
(
FormWindowBase
::
SaveAllResourceFiles
),
82
m_useIdBasedTranslations
(
false
),
83
m_connectSlotsByName
(
true
)
84
{
85
}
86
87
Grid
FormWindowBasePrivate
::
m_defaultGrid
;
88
89
FormWindowBase
::
FormWindowBase
(
QDesignerFormEditorInterface
*
core
,
QWidget
*
parent
,
Qt
::
WindowFlags
flags
) :
90
QDesignerFormWindowInterface
(
parent
,
flags
),
91
m_d
(
new
FormWindowBasePrivate
(
core
))
92
{
93
syncGridFeature
();
94
m_d
->
m_pixmapCache
=
new
DesignerPixmapCache
(
this
);
95
m_d
->
m_iconCache
=
new
DesignerIconCache
(
m_d
->
m_pixmapCache
,
this
);
96
if
(
core
->
integration
()->
hasFeature
(
QDesignerIntegrationInterface
::
DefaultWidgetActionFeature
))
97
connect
(
this
, &
QDesignerFormWindowInterface
::
activated
,
this
, &
FormWindowBase
::
triggerDefaultAction
);
98
}
99
100
FormWindowBase
::~
FormWindowBase
()
101
{
102
QSet
<
QDesignerPropertySheet
*>
sheets
;
103
for
(
auto
it
=
m_d
->
m_reloadableResources
.
cbegin
(),
end
=
m_d
->
m_reloadableResources
.
cend
();
it
!=
end
; ++
it
)
104
sheets
.
insert
(
it
.
key
());
105
for
(
auto
it
=
m_d
->
m_reloadablePropertySheets
.
cbegin
(),
end
=
m_d
->
m_reloadablePropertySheets
.
cend
();
it
!=
end
; ++
it
)
106
sheets
.
insert
(
it
.
key
());
107
108
m_d
->
m_reloadableResources
.
clear
();
109
m_d
->
m_reloadablePropertySheets
.
clear
();
110
111
for
(
QDesignerPropertySheet
*
sheet
:
sheets
)
112
disconnectSheet
(
sheet
);
113
114
delete
m_d
;
115
}
116
117
DesignerPixmapCache
*
FormWindowBase
::
pixmapCache
()
const
118
{
119
return
m_d
->
m_pixmapCache
;
120
}
121
122
DesignerIconCache
*
FormWindowBase
::
iconCache
()
const
123
{
124
return
m_d
->
m_iconCache
;
125
}
126
127
QtResourceSet
*
FormWindowBase
::
resourceSet
()
const
128
{
129
return
m_d
->
m_resourceSet
;
130
}
131
132
void
FormWindowBase
::
setResourceSet
(
QtResourceSet
*
resourceSet
)
133
{
134
m_d
->
m_resourceSet
=
resourceSet
;
135
}
136
137
void
FormWindowBase
::
addReloadableProperty
(
QDesignerPropertySheet
*
sheet
,
int
index
)
138
{
139
connectSheet
(
sheet
);
140
m_d
->
m_reloadableResources
[
sheet
].
insert
(
index
);
141
}
142
143
void
FormWindowBase
::
removeReloadableProperty
(
QDesignerPropertySheet
*
sheet
,
int
index
)
144
{
145
m_d
->
m_reloadableResources
[
sheet
].
remove
(
index
);
146
if
(
m_d
->
m_reloadableResources
[
sheet
].
isEmpty
()) {
147
m_d
->
m_reloadableResources
.
remove
(
sheet
);
148
disconnectSheet
(
sheet
);
149
}
150
}
151
152
void
FormWindowBase
::
addReloadablePropertySheet
(
QDesignerPropertySheet
*
sheet
,
QObject
*
object
)
153
{
154
if
(
qobject_cast
<
QTreeWidget
*>(
object
) ||
155
qobject_cast
<
QTableWidget
*>(
object
) ||
156
qobject_cast
<
QListWidget
*>(
object
) ||
157
qobject_cast
<
QComboBox
*>(
object
)) {
158
connectSheet
(
sheet
);
159
m_d
->
m_reloadablePropertySheets
[
sheet
] =
object
;
160
}
161
}
162
163
void
FormWindowBase
::
connectSheet
(
QDesignerPropertySheet
*
sheet
)
164
{
165
if
(
m_d
->
m_reloadableResources
.
contains
(
sheet
)
166
||
m_d
->
m_reloadablePropertySheets
.
contains
(
sheet
)) {
167
// already connected
168
return
;
169
}
170
connect
(
sheet
, &
QObject
::
destroyed
,
this
, &
FormWindowBase
::
sheetDestroyed
);
171
}
172
173
void
FormWindowBase
::
disconnectSheet
(
QDesignerPropertySheet
*
sheet
)
174
{
175
if
(
m_d
->
m_reloadableResources
.
contains
(
sheet
)
176
||
m_d
->
m_reloadablePropertySheets
.
contains
(
sheet
)) {
177
// still need to be connected
178
return
;
179
}
180
disconnect
(
sheet
, &
QObject
::
destroyed
,
this
, &
FormWindowBase
::
sheetDestroyed
);
181
}
182
183
void
FormWindowBase
::
sheetDestroyed
(
QObject
*
object
)
184
{
185
// qobject_cast<QDesignerPropertySheet *>(object)
186
// will fail since the destructor of QDesignerPropertySheet
187
// has already finished
188
189
for
(
auto
it
=
m_d
->
m_reloadableResources
.
begin
();
190
it
!=
m_d
->
m_reloadableResources
.
end
(); ++
it
) {
191
if
(
it
.
key
() ==
object
) {
192
m_d
->
m_reloadableResources
.
erase
(
it
);
193
break
;
194
}
195
}
196
197
for
(
auto
it
=
m_d
->
m_reloadablePropertySheets
.
begin
();
198
it
!=
m_d
->
m_reloadablePropertySheets
.
end
(); ++
it
) {
199
if
(
it
.
key
() ==
object
) {
200
m_d
->
m_reloadablePropertySheets
.
erase
(
it
);
201
break
;
202
}
203
}
204
}
205
206
void
FormWindowBase
::
reloadProperties
()
207
{
208
pixmapCache
()->
clear
();
209
iconCache
()->
clear
();
210
for
(
auto
it
=
m_d
->
m_reloadableResources
.
cbegin
(),
end
=
m_d
->
m_reloadableResources
.
cend
();
it
!=
end
; ++
it
) {
211
QDesignerPropertySheet
*
sheet
=
it
.
key
();
212
for
(
int
index
:
it
.
value
()) {
213
const
QVariant
newValue
=
sheet
->
property
(
index
);
214
if
(
qobject_cast
<
QLabel
*>(
sheet
->
object
()) &&
sheet
->
propertyName
(
index
) ==
"text"_L1
) {
215
const
PropertySheetStringValue
newString
=
qvariant_cast
<
PropertySheetStringValue
>(
newValue
);
216
// optimize a bit, reset only if the text value might contain a reference to qt resources
217
// (however reloading of icons other than taken from resources might not work here)
218
if
(
newString
.
value
().
contains
(
":/"_L1
)) {
219
const
QVariant
resetValue
=
QVariant
::
fromValue
(
PropertySheetStringValue
());
220
sheet
->
setProperty
(
index
,
resetValue
);
221
}
222
}
223
sheet
->
setProperty
(
index
,
newValue
);
224
}
225
if
(
QTabWidget
*
tabWidget
=
qobject_cast
<
QTabWidget
*>(
sheet
->
object
())) {
226
const
int
count
=
tabWidget
->
count
();
227
const
int
current
=
tabWidget
->
currentIndex
();
228
const
QString
currentTabIcon
= u"currentTabIcon"_s;
229
for
(
int
i
= 0;
i
<
count
;
i
++) {
230
tabWidget
->
setCurrentIndex
(
i
);
231
const
int
index
=
sheet
->
indexOf
(
currentTabIcon
);
232
sheet
->
setProperty
(
index
,
sheet
->
property
(
index
));
233
}
234
tabWidget
->
setCurrentIndex
(
current
);
235
}
else
if
(
QToolBox
*
toolBox
=
qobject_cast
<
QToolBox
*>(
sheet
->
object
())) {
236
const
int
count
=
toolBox
->
count
();
237
const
int
current
=
toolBox
->
currentIndex
();
238
const
QString
currentItemIcon
= u"currentItemIcon"_s;
239
for
(
int
i
= 0;
i
<
count
;
i
++) {
240
toolBox
->
setCurrentIndex
(
i
);
241
const
int
index
=
sheet
->
indexOf
(
currentItemIcon
);
242
sheet
->
setProperty
(
index
,
sheet
->
property
(
index
));
243
}
244
toolBox
->
setCurrentIndex
(
current
);
245
}
246
}
247
for
(
QObject
*
object
:
std
::
as_const
(
m_d
->
m_reloadablePropertySheets
)) {
248
reloadIconResources
(
iconCache
(),
object
);
249
}
250
}
251
252
void
FormWindowBase
::
resourceSetActivated
(
QtResourceSet
*
resource
,
bool
resourceSetChanged
)
253
{
254
if
(
resource
==
resourceSet
() &&
resourceSetChanged
) {
255
reloadProperties
();
256
emit
pixmapCache
()->
reloaded
();
257
emit
iconCache
()->
reloaded
();
258
if
(
QDesignerPropertyEditor
*
propertyEditor
=
qobject_cast
<
QDesignerPropertyEditor
*>(
core
()->
propertyEditor
()))
259
propertyEditor
->
reloadResourceProperties
();
260
}
261
}
262
263
QVariantMap
FormWindowBase
::
formData
()
264
{
265
QVariantMap
rc
;
266
if
(
m_d
->
m_hasFormGrid
)
267
m_d
->
m_grid
.
addToVariantMap
(
rc
,
true
);
268
return
rc
;
269
}
270
271
void
FormWindowBase
::
setFormData
(
const
QVariantMap
&
vm
)
272
{
273
Grid
formGrid
;
274
m_d
->
m_hasFormGrid
=
formGrid
.
fromVariantMap
(
vm
);
275
if
(
m_d
->
m_hasFormGrid
)
276
m_d
->
m_grid
=
formGrid
;
277
}
278
279
QPoint
FormWindowBase
::
grid
()
const
280
{
281
return
QPoint
(
m_d
->
m_grid
.
deltaX
(),
m_d
->
m_grid
.
deltaY
());
282
}
283
284
void
FormWindowBase
::
setGrid
(
const
QPoint
&
grid
)
285
{
286
m_d
->
m_grid
.
setDeltaX
(
grid
.
x
());
287
m_d
->
m_grid
.
setDeltaY
(
grid
.
y
());
288
}
289
290
bool
FormWindowBase
::
hasFeature
(
Feature
f
)
const
291
{
292
return
f
&
m_d
->
m_feature
;
293
}
294
295
static
void
recursiveUpdate
(
QWidget
*w)
296
{
297
w->update();
298
299
for
(
auto
*child : w->children()) {
300
if
(QWidget *w = qobject_cast<QWidget*>(child))
301
recursiveUpdate(w);
302
}
303
}
304
305
void
FormWindowBase
::
setFeatures
(
Feature
f
)
306
{
307
m_d
->
m_feature
=
f
;
308
const
bool
enableGrid
=
f
&
GridFeature
;
309
m_d
->
m_grid
.
setVisible
(
enableGrid
);
310
m_d
->
m_grid
.
setSnapX
(
enableGrid
);
311
m_d
->
m_grid
.
setSnapY
(
enableGrid
);
312
emit
featureChanged
(
f
);
313
recursiveUpdate
(
this
);
314
}
315
316
FormWindowBase
::
Feature
FormWindowBase
::
features
()
const
317
{
318
return
m_d
->
m_feature
;
319
}
320
321
bool
FormWindowBase
::
gridVisible
()
const
322
{
323
return
m_d
->
m_grid
.
visible
() &&
currentTool
() == 0;
324
}
325
326
FormWindowBase
::
ResourceFileSaveMode
FormWindowBase
::
resourceFileSaveMode
()
const
327
{
328
return
m_d
->
m_saveResourcesBehaviour
;
329
}
330
331
void
FormWindowBase
::
setResourceFileSaveMode
(
ResourceFileSaveMode
behaviour
)
332
{
333
m_d
->
m_saveResourcesBehaviour
=
behaviour
;
334
}
335
336
void
FormWindowBase
::
syncGridFeature
()
337
{
338
if
(
m_d
->
m_grid
.
snapX
() ||
m_d
->
m_grid
.
snapY
())
339
m_d
->
m_feature
|=
GridFeature
;
340
else
341
m_d
->
m_feature
&= ~
GridFeature
;
342
}
343
344
void
FormWindowBase
::
setDesignerGrid
(
const
Grid
&
grid
)
345
{
346
m_d
->
m_grid
=
grid
;
347
syncGridFeature
();
348
recursiveUpdate
(
this
);
349
}
350
351
const
Grid
&
FormWindowBase
::
designerGrid
()
const
352
{
353
return
m_d
->
m_grid
;
354
}
355
356
bool
FormWindowBase
::
hasFormGrid
()
const
357
{
358
return
m_d
->
m_hasFormGrid
;
359
}
360
361
void
FormWindowBase
::
setHasFormGrid
(
bool
b
)
362
{
363
m_d
->
m_hasFormGrid
=
b
;
364
}
365
366
void
FormWindowBase
::
setDefaultDesignerGrid
(
const
Grid
&
grid
)
367
{
368
FormWindowBasePrivate
::
m_defaultGrid
=
grid
;
369
}
370
371
const
Grid
&
FormWindowBase
::
defaultDesignerGrid
()
372
{
373
return
FormWindowBasePrivate
::
m_defaultGrid
;
374
}
375
376
QMenu
*
FormWindowBase
::
initializePopupMenu
(
QWidget
*
/*managedWidget*/
)
377
{
378
return
nullptr
;
379
}
380
381
// Widget under mouse for finding the Widget to highlight
382
// when doing DnD. Restricts to pages by geometry if a container with
383
// a container extension (or one of its helper widgets) is hit; otherwise
384
// returns the widget as such (be it managed/unmanaged)
385
386
QWidget
*
FormWindowBase
::
widgetUnderMouse
(
const
QPoint
&
formPos
,
WidgetUnderMouseMode
/* wum */
)
387
{
388
// widget_under_mouse might be some temporary thing like the dropLine. We need
389
// the actual widget that's part of the edited GUI.
390
QWidget
*
rc
=
widgetAt
(
formPos
);
391
if
(!
rc
||
qobject_cast
<
ConnectionEdit
*>(
rc
))
392
return
nullptr
;
393
394
if
(
rc
==
mainContainer
()) {
395
// Refuse main container areas if the main container has a container extension,
396
// for example when hitting QToolBox/QTabWidget empty areas.
397
if
(
qt_extension
<
QDesignerContainerExtension
*>(
core
()->
extensionManager
(),
rc
))
398
return
nullptr
;
399
return
rc
;
400
}
401
402
// If we hit on container extension type container, make sure
403
// we use the top-most current page
404
if
(
QWidget
*
container
=
findContainer
(
rc
,
false
))
405
if
(
QDesignerContainerExtension
*
c
=
qt_extension
<
QDesignerContainerExtension
*>(
core
()->
extensionManager
(),
container
)) {
406
// For container that do not have a "stacked" nature (QToolBox, QMdiArea),
407
// make sure the position is within the current page
408
const
int
ci
=
c
->
currentIndex
();
409
if
(
ci
< 0)
410
return
nullptr
;
411
QWidget
*
page
=
c
->
widget
(
ci
);
412
QRect
pageGeometry
=
page
->
geometry
();
413
pageGeometry
.
moveTo
(
page
->
mapTo
(
this
,
pageGeometry
.
topLeft
()));
414
if
(!
pageGeometry
.
contains
(
formPos
))
415
return
nullptr
;
416
return
page
;
417
}
418
419
return
rc
;
420
}
421
422
void
FormWindowBase
::
deleteWidgetList
(
const
QWidgetList
&
widget_list
)
423
{
424
// We need a macro here even for single widgets because the some components (for example,
425
// the signal slot editor are connected to widgetRemoved() and add their
426
// own commands (for example, to delete w's connections)
427
const
QString
description
=
widget_list
.
size
() == 1 ?
428
tr
(
"Delete '%1'"
).
arg
(
widget_list
.
constFirst
()->
objectName
()) :
tr
(
"Delete"
);
429
430
commandHistory
()->
beginMacro
(
description
);
431
for
(
QWidget
*
w
:
std
::
as_const
(
widget_list
)) {
432
emit
widgetRemoved
(
w
);
433
DeleteWidgetCommand
*
cmd
=
new
DeleteWidgetCommand
(
this
);
434
cmd
->
init
(
w
);
435
commandHistory
()->
push
(
cmd
);
436
}
437
commandHistory
()->
endMacro
();
438
}
439
440
QMenu
*
FormWindowBase
::
createExtensionTaskMenu
(
QDesignerFormWindowInterface
*
fw
,
QObject
*
o
,
bool
trailingSeparator
)
441
{
442
using
ActionList
=
QList
<
QAction
*>;
443
ActionList
actions
;
444
// 1) Standard public extension
445
QExtensionManager
*
em
=
fw
->
core
()->
extensionManager
();
446
if
(
const
QDesignerTaskMenuExtension
*
extTaskMenu
=
qt_extension
<
QDesignerTaskMenuExtension
*>(
em
,
o
))
447
actions
+=
extTaskMenu
->
taskActions
();
448
if
(
const
auto
*
intTaskMenu
=
qobject_cast
<
QDesignerTaskMenuExtension
*>(
em
->
extension
(
o
, u"QDesignerInternalTaskMenuExtension"_s))) {
449
if
(!
actions
.
isEmpty
()) {
450
QAction
*
a
=
new
QAction
(
fw
);
451
a
->
setSeparator
(
true
);
452
actions
.
push_back
(
a
);
453
}
454
actions
+=
intTaskMenu
->
taskActions
();
455
}
456
if
(
actions
.
isEmpty
())
457
return
nullptr
;
458
if
(
trailingSeparator
&& !
actions
.
constLast
()->
isSeparator
()) {
459
QAction
*
a
=
new
QAction
(
fw
);
460
a
->
setSeparator
(
true
);
461
actions
.
push_back
(
a
);
462
}
463
QMenu
*
rc
=
new
QMenu
;
464
for
(
auto
*
a
:
std
::
as_const
(
actions
))
465
rc
->
addAction
(
a
);
466
return
rc
;
467
}
468
469
void
FormWindowBase
::
emitObjectRemoved
(
QObject
*
o
)
470
{
471
emit
objectRemoved
(
o
);
472
}
473
474
DeviceProfile
FormWindowBase
::
deviceProfile
()
const
475
{
476
return
m_d
->
m_deviceProfile
;
477
}
478
479
QString
FormWindowBase
::
styleName
()
const
480
{
481
return
m_d
->
m_deviceProfile
.
isEmpty
() ?
QString
() :
m_d
->
m_deviceProfile
.
style
();
482
}
483
484
void
FormWindowBase
::
emitWidgetRemoved
(
QWidget
*
w
)
485
{
486
emit
widgetRemoved
(
w
);
487
}
488
489
QString
FormWindowBase
::
deviceProfileName
()
const
490
{
491
return
m_d
->
m_deviceProfile
.
isEmpty
() ?
QString
() :
m_d
->
m_deviceProfile
.
name
();
492
}
493
494
void
FormWindowBase
::
setLineTerminatorMode
(
FormWindowBase
::
LineTerminatorMode
mode
)
495
{
496
m_d
->
m_lineTerminatorMode
=
mode
;
497
}
498
499
FormWindowBase
::
LineTerminatorMode
FormWindowBase
::
lineTerminatorMode
()
const
500
{
501
return
m_d
->
m_lineTerminatorMode
;
502
}
503
504
void
FormWindowBase
::
triggerDefaultAction
(
QWidget
*
widget
)
505
{
506
if
(
QAction
*
action
=
qdesigner_internal
::
preferredEditAction
(
core
(),
widget
))
507
QTimer
::
singleShot
(0,
action
, &
QAction
::
trigger
);
508
}
509
510
bool
FormWindowBase
::
useIdBasedTranslations
()
const
511
{
512
return
m_d
->
m_useIdBasedTranslations
;
513
}
514
515
void
FormWindowBase
::
setUseIdBasedTranslations
(
bool
v
)
516
{
517
m_d
->
m_useIdBasedTranslations
=
v
;
518
}
519
520
QString
FormWindowBase
::
idBasedTranslationLabel
()
const
521
{
522
return
m_d
->
m_idBasedTranslationLabel
;
523
}
524
525
void
FormWindowBase
::
setIdBasedTranslationLabel
(
const
QString
&
v
)
526
{
527
m_d
->
m_idBasedTranslationLabel
=
v
;
528
}
529
530
bool
FormWindowBase
::
connectSlotsByName
()
const
531
{
532
return
m_d
->
m_connectSlotsByName
;
533
}
534
535
void
FormWindowBase
::
setConnectSlotsByName
(
bool
v
)
536
{
537
m_d
->
m_connectSlotsByName
=
v
;
538
}
539
540
QStringList
FormWindowBase
::
checkContents
()
const
541
{
542
if
(!
mainContainer
())
543
return
QStringList
(
tr
(
"Invalid form"
));
544
// Test for non-laid toplevel spacers, which will not be saved
545
// as not to throw off uic.
546
QStringList
problems
;
547
const
auto
&
spacers
=
mainContainer
()->
findChildren
<
Spacer
*>();
548
for
(
const
Spacer
*
spacer
:
spacers
) {
549
if
(
spacer
->
parentWidget
() && !
spacer
->
parentWidget
()->
layout
()) {
550
problems
.
push_back
(
tr
(
"<p>This file contains top level spacers.<br/>"
551
"They will <b>not</b> be saved.</p><p>"
552
"Perhaps you forgot to create a layout?</p>"
));
553
break
;
554
}
555
}
556
return
problems
;
557
}
558
559
}
// namespace qdesigner_internal
560
561
QT_END_NAMESPACE
QPainter::QWidget
friend class QWidget
Definition
qpainter.h:432
qdesigner_internal::FormWindowBasePrivate
Definition
formwindowbase.cpp:50
qdesigner_internal::FormWindowBasePrivate::m_deviceProfile
const DeviceProfile m_deviceProfile
Definition
formwindowbase.cpp:64
qdesigner_internal::FormWindowBasePrivate::m_defaultGrid
static Grid m_defaultGrid
Definition
formwindowbase.cpp:54
qdesigner_internal::FormWindowBasePrivate::m_grid
Grid m_grid
Definition
formwindowbase.cpp:57
qdesigner_internal::FormWindowBasePrivate::m_resourceSet
QtResourceSet * m_resourceSet
Definition
formwindowbase.cpp:61
qdesigner_internal::FormWindowBasePrivate::m_iconCache
DesignerIconCache * m_iconCache
Definition
formwindowbase.cpp:60
qdesigner_internal::FormWindowBasePrivate::m_idBasedTranslationLabel
QString m_idBasedTranslationLabel
Definition
formwindowbase.cpp:69
qdesigner_internal::FormWindowBasePrivate::m_useIdBasedTranslations
bool m_useIdBasedTranslations
Definition
formwindowbase.cpp:67
qdesigner_internal::FormWindowBasePrivate::m_connectSlotsByName
bool m_connectSlotsByName
Definition
formwindowbase.cpp:68
qdesigner_internal::FormWindowBasePrivate::m_lineTerminatorMode
FormWindowBase::LineTerminatorMode m_lineTerminatorMode
Definition
formwindowbase.cpp:65
qdesigner_internal::FormWindowBasePrivate::m_pixmapCache
DesignerPixmapCache * m_pixmapCache
Definition
formwindowbase.cpp:59
qdesigner_internal::FormWindowBasePrivate::m_reloadablePropertySheets
QHash< QDesignerPropertySheet *, QObject * > m_reloadablePropertySheets
Definition
formwindowbase.cpp:63
qdesigner_internal::FormWindowBasePrivate::m_reloadableResources
QHash< QDesignerPropertySheet *, QSet< int > > m_reloadableResources
Definition
formwindowbase.cpp:62
qdesigner_internal::FormWindowBasePrivate::m_hasFormGrid
bool m_hasFormGrid
Definition
formwindowbase.cpp:58
qdesigner_internal::FormWindowBasePrivate::m_feature
QDesignerFormWindowInterface::Feature m_feature
Definition
formwindowbase.cpp:56
qdesigner_internal::FormWindowBasePrivate::m_saveResourcesBehaviour
FormWindowBase::ResourceFileSaveMode m_saveResourcesBehaviour
Definition
formwindowbase.cpp:66
qdesigner_internal::FormWindowBasePrivate::FormWindowBasePrivate
FormWindowBasePrivate(QDesignerFormEditorInterface *core)
Definition
formwindowbase.cpp:72
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
qdesigner_internal
Auxiliary methods to store/retrieve settings.
Definition
buddyeditor.cpp:67
qdesigner_internal::recursiveUpdate
static void recursiveUpdate(QWidget *w)
Definition
formwindowbase.cpp:295
qttools
src
designer
src
lib
shared
formwindowbase.cpp
Generated on
for Qt by
1.18.0