[Interest] Item editor at preferred size when using custom delegate?

Elvis Stansvik elvstone at gmail.com
Fri Feb 12 16:00:13 CET 2016


2016-02-12 15:54 GMT+01:00 Elvis Stansvik <elvstone at gmail.com>:
> 2016-02-12 14:59 GMT+01:00 Elvis Stansvik <elvstone at gmail.com>:
>> Hi all,
>>
>> I have a very basic item delegate which opens up a custom editor:
>>
>> class MineralLevelsDelegate(QStyledItemDelegate):
>>
>>     def createEditor(self, parent, option, index):
>>         return MineralLevelsEditor(parent)
>>
>>     def updateEditorGeometry(self, editor, option, index):
>>         editor.setGeometry(
>>             option.rect.x(), option.rect.y() + option.rect.height(),
>>             editor.sizeHint().width(), editor.sizeHint().height())
>>
>> What you see in updateEditorGeometry(...) above is my attempt at
>> making the editor show up at its preferred size (instead of being
>> constrained to the cell in the QTreeView I'm using). My attempt is to
>> use the editor's sizeHint() in the call to setGeometry(...).
>>
>> The problem seems to be that the sizeHint() or the editor is 0x0 at
>> that point (has not been laid out?), and consequently the editor show
>> up as a tiny little rect (see attached sizehint.png). I'm also
>> attaching hardcoded.png, which shows the editor when I instead
>> hardcode it to 200x100. This is kind of the look I want, but obviously
>> I don't want to hardcode it to 200x100, but have it use its preferred
>> size.
>
> Half replying to myself here: The size hint is actually returning
> 16x16. I think the problem is maybe that setEditorData has not been
> called before updateEditorGeometry is called, which in my case means
> that my sliders has not been created and added to the editor's layout
> yet.
>
> So my question is now: How can I adjust the editor's size after
> setEditorData has been called?

Nevermind, it was as simple as:

class MineralLevelsDelegate(QStyledItemDelegate):

    def createEditor(self, parent, option, index):
        return MineralLevelsEditor(parent)

    def updateEditorGeometry(self, editor, option, index):
        editor.move(option.rect.x(), option.rect.y() + option.rect.height())

That is, instead of using setGeometry, I let the editor stay at its
current size (which is its preferred size), and only use move(..) to
position it below the cell.

Sorry for the noise, hope it can help someone else.

Elvis

>
> Elvis
>
>>
>> So question is: How can I make the editor widget show up at its preferred size?
>>
>> Many thanks in advance.
>>
>> Elvis



More information about the Interest mailing list