[Interest] item edit on mouse over - was: dynamic widget creation in QScrollArea

Frank Rueter | OHUfx frank at ohufx.com
Tue Aug 9 07:27:05 CEST 2016


Ok, so after some more experimenting I am fairly certain that using 
seItemWidget inside the delegate's paint event is a bad idea.
My second approach seems more promising so far: Using the custom movie 
player widget as the delegate's editor, even though I don't actually 
want to edit anything.
However, since I need the movie player to start playing on mouse over, I 
need to work out how to pop the item under the mouse into edit() mode 
(and finish editing when the mouse leaves the item).
After googling a bit it seems a few others have tried this but to no avail.

Any ideas on that one?

Cheers,
frank

On 8/08/16 4:28 pm, Frank Rueter | OHUfx wrote:
> Hi Bo,
>
> I have followed your advise and gone back to QListView with a delegate.
> My first test was to render the custom widget I need via the delegate 
> paint method. This populates a static version of the movie player (the 
> custom widget I need).
> Then, also in the delegate's paint method, I use setItemWidget if the 
> mouse hovers over the item, to get the fully fledged and interactive 
> widget.
> This seems to be promising but it kinda feels wrong to set an item 
> widget in the paint method. Should I worry?
>
> Also, I can't get the rendered image to line up with the item widget 
> itself. The render seems to have the correct size but the widget, when 
> the mouse hovers over the item, is slightly off, causing the item to 
> pop a little and leave out-of-date paint artifacts when the mouse 
> leaves again.
>
> Below is my test code for the delegate.
>
> Now I am wondering if the below approach is acceptable (setting an 
> item widget inside the delegate's paint event).
> Alternatively I'm wondering if I could/should use the delegate's 
> createEditor method to display the widgets of all visible items to 
> achieve the same thing (which is full interactive and animated widget 
> in all visible items). I have, however, not been able to figure out 
> how to call the editor on mouse enter, which I need because the movie 
> is supposed to play when the mouse hovers over it.
>
> Any opinions on this?
>
> Cheers,
> frank
>
>
> class DelegateOld(QtGui.QItemDelegate):
>
>     def __init__(self, parent = None):
>
>         super(Delegate, self).__init__(parent)
>         self.thumbnail = None
>
>     def paint(self, painter, option, index):
>         item = index.model().itemFromIndex(index)
>         self.thumbnail = MyMovie(item)
>
>         if option.state & QtGui.QStyle.State_MouseOver:
>             # swap render for actual widget here. So the user can 
> interact with it - doesn't feel right though to do this in the paint event
>             existingThumb = self.view.indexWidget(index)
>             if not existingThumb:
>                 self.view.setIndexWidget(index, self.thumbnail)
>         else:
>             self.thumbnail.render(painter, 
> QtCore.QPoint(option.rect.x(), option.rect.y()))
>
>     def sizeHint(self, option, index):
>         return MyMovie.thumbSize
>
> On 4/08/16 8:36 pm, Bo Thorsen wrote:
>> Den 04-08-2016 kl. 10:05 skrev Frank Rueter | OHUfx:
>>> I am playing with the idea of writing a custom widget based on
>>> QScrollArea, where widgets are created as the user scrolls.
>>> I'm just hoping to bounce the general idea of you guys here to see if
>>> I'm heading in the right direction:
>>>
>>> I have a heap of custom widgets, potentially thousands, depending on 
>>> the
>>> contents of a database.
>>> I'd like to show them in a grid that fits as many widgets horizontally
>>> as will fit in the current window size (dynamic).
>>> I would also like smooth vertical scrolling.
>>>
>>> If I create a single parent widget with a grid layout that creates all
>>> widgets on start up, it takes ages.
>>> So I'm thinking if I use the child widgets' visibleRegion() to find the
>>> ones currently visible in the scroll area, then figure out the indexes
>>> of the widgets in the rows above and below to create them dynamically,
>>> that should speed up the startup and still provide smooth scrolling.
>>>
>>> Obviously I'd have to manually scale the scroll area based on the
>>> maximum amount of widgets and the parent widget's width to get an
>>> indicative scrollbar.
>>> Not sure how tricky that will be.
>>>
>>> Does that sound crazy or doable?
>>>
>>> Basically I am trying to re-create the behavior of a QListView in icon
>>> mode. I tried using QListView with delegates, but couldn't get the
>>> delegates to provide the kind of complexity I need for the child 
>>> widgets
>>> which I have already written (which are basically mini movie players
>>> that can be drag&dropped and have playback all at once on demand).
>>>
>>> Any thoughts on this before I dive into this little experiment?
>>
>> I don't think that sounds unreasonable. If I were you, I would try 
>> very hard to stay with QListView instead, but other than that it 
>> doesn't sound hard to do. Time consuming, yes, but not difficult.
>>
>> Bo Thorsen,
>> Director, Viking Software.
>>
>
> -- 
> ohufxLogo 50x50 <http://www.ohufx.com> 	
>
> *vfx for storytellers <http://www.ohufx.com>*
>
> *vfx compositing <http://ohufx.com/index.php/vfx-compositing> | 
> *workflow customisation & consulting 
> <http://ohufx.com/index.php/vfx-customising>**
>
> *W E L L I N G T O N    |    N E W   Z E A L A N D *
>
>
>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest

-- 
ohufxLogo 50x50 <http://www.ohufx.com> 	

*vfx for storytellers <http://www.ohufx.com>*

*vfx compositing <http://ohufx.com/index.php/vfx-compositing> | 
*workflow customisation & consulting 
<http://ohufx.com/index.php/vfx-customising>**

*W E L L I N G T O N    |    N E W   Z E A L A N D *

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20160809/0a1485a6/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/png
Size: 2666 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20160809/0a1485a6/attachment.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ohufxLogo_50x50.png
Type: image/png
Size: 2666 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20160809/0a1485a6/attachment-0001.png>


More information about the Interest mailing list