Bug report #3236
Cannot determine the type of QgsComposerItem
Status: | Closed | ||
---|---|---|---|
Priority: | Low | ||
Assignee: | Borys Jurgiel | ||
Category: | Python plugins | ||
Affected QGIS version: | Regression?: | No | |
Operating System: | Debian | Easy fix?: | No |
Pull Request or Patch supplied: | Resolution: | fixed | |
Crashes QGIS or corrupts data: | Copied to github as #: | 13296 |
Description
In Python console, type(item) will only return <class 'qgis.core.QgsComposerItem'>
From IRC:
[09:49] <anita1> how can i get all QgsComposerLabels from a composer? currently, i can just access all QgsComposerItems but don't know how to filter only labels from them
[10:50] <marco> hi anita1
[10:50] <marco> dynamic cast in (C++) or query the class type (in python)
[10:51] <anita1> marco: hi. but that returns only QgsComposerItem, not label
[10:51] <anita1> type(itemsr0) <class 'qgis.core.QgsComposerItem'>
[10:52] <marco> in python? Then there is probably missing a 'convertToSubclass' somewhere in the python bindings...
History
#1 Updated by Nathan Woodrow almost 14 years ago
I have added what is my attempt at fixing the bug, I gave it a run this morning and the types are returned correctly in Python however if you try and call any of the methods on the returned types you get a segfault. Eg calling .displayText() on a QgsComposerLabel causes a segmentation fault. C and C++ aren't my normal programming languages, so I may have done something wrong or missed something.
#2 Updated by Marco Hugentobler almost 14 years ago
Thanks, NathanW!
The patch is applied in .
I noticed those crashes too. The strange thing is it does not happen for items added via the python bindings, only for the already existing ones.
#3 Updated by Nathan Woodrow almost 14 years ago
Thanks. I'm doing some testing now, not sure how much help it will be but if you cast in python using something like:
label = selectedComposerItems()r0 /* The first label on the composer */
label.+class+ = qgis.core.qgscomposerlabel
You can call label.displayText() fine. The above will still crash sometimes even with the code I added to the SIP.
#4 Updated by Martin Dobias almost 14 years ago
- Resolution set to fixed
- Status changed from Open to Closed
Fixed in