[PySide] events for QStyledItemDelegate

Frank Rueter | OHUfx frank at ohufx.com
Mon Jul 2 23:06:54 CEST 2012


Hi Aaron,

once again thanks a lot for your advice!

I remember using the IconMode for another reason which I can't remember 
now. Your explanation makes sense though.
I didn't use a table view because I didn't know how to set it up so once 
cell would display independent items (rather than one item's attributes 
being represented by an entire row).

I am more than happy to abandon delegates, I have now realised which 
situations they are good for, and my case is certainly not one of those 
since I need no editing facilities but interactive controls for each items.

 >> - Define the grid of widgets and the widgets in the view, emit 
signals for your mouse operations (enter, leave, drag and drop etc.)
how to I assign widgets to a TableView? That's what I was trying all day 
yesterday. Or do I have to use a TableWidget?

 >>- Handle this signals in the controller and propagate changes to the 
model if there are any (e.g. drag and drop changes the order)
there won't ever be any changes. drag&drop is only meant to enable you 
to drag items from the view to another widget to collect them (to then 
be able to operate them as a collection).

Thanks heaps for the pointers. I very much felt like I was heading into 
a dead end.

 >> Have a nice evening!
I'm in New Zealand, just starting work now :)

Cheers,
frank

On 3/07/12 1:22 AM, Aaron Richiger wrote:
> Hello Frank!
>
> I still think, that delegates are not the best option here... I played 
> around with the current version of your project and noticed the following:
>
> - Using IconMode for the QListview is not thought for your use of 
> making a QListView with two columns. IconMode is used if there is a 
> relation between the first item (icon) and the second item(e.g. 
> label). A typical example is a FileBrowser, where you have the icon 
> first and the filename after. Since you have absolutely no connection 
> between your first and second item, this is the wrong choice. It would 
> be better to use QTableView in such a case (with the advantage, that 
> you can easily change your GUI later to display three or four columns 
> instead of just two, which would not be possible with your solution)
> - I still think, that delegates are not the best option for your 
> purpose. Usually, delegates are for editing the data of the underlying 
> model, but in your case, you don't want to change the data of the 
> model, but start an action (e.g. on mouseClick). I think, it would be 
> easier to implement it without delegates!
>
> I would implement it the following way:
>
> - Define the grid of widgets and the widgets in the view, emit signals 
> for your mouse operations (enter, leave, drag and drop etc.)
> - Handle this signals in the controller and propagate changes to the 
> model if there are any (e.g. drag and drop changes the order)
>
> Have a nice evening!
> Aaron
>
>
>
> Am 02.07.2012 08:18, schrieb Frank Rueter | OHUfx:
>> I'm half a step closer I think:
>>
>> I'm using the QStyledItemDelegate.createEditor method to assign my 
>> custom widget to the delegate as an editor:
>>
>>
>> class ToolButtonDelegate( QStyledItemDelegate ):
>>     '''Delegate for ToolView. Might have to use widget instead to get 
>> mouse over effects'''
>>     def __init__( self, parent=None ):
>>         super( ToolButtonDelegate, self).__init__( parent )
>>         self.parent = parent
>>
>>     def createEditor( self, parent, option, index ):
>>         if not index.isValid():
>>             return False
>>         btn = FancyButton( index.data( Qt.UserRole ), parent=parent )
>>         return btn
>>
>>
>> This draws the "FancyButton" widget when the item is clicked, or 
>> whatever else the View's editTriggers are set to.
>> Unfortunately there is no "mouseOver" edit trigger which could have 
>> been a feasible workaround.
>>
>> I am just experimenting with connecting the QAbstractView.entered 
>> signal to the QAbstractView.edit slot but with very limited success. 
>> I get the editor on mouse over for the first item, but it stays open 
>> and I get "edit: editing failed" on all subsequent enter event.
>> There is no "left" signal to close the editor again when the mouse 
>> cursor leaves the respective item, so I'm not sure if it's possible 
>> to use this approach.
>>
>>
>>
>>
>>
>> On 2/07/12 5:20 PM, Frank Rueter | OHUfx wrote:
>>> Does anybody have an idea how to do this?
>>> This seems to be turning into a show stopper for me.
>>> I found this thread but since it's C++ I have a hard time 
>>> deciphering it:
>>> http://www.qtcentre.org/threads/8660-Drawing-a-widget-in-QItemDelegate-s-paint-method 
>>>
>>>
>>> I don't need to edit the item data, just need to represent it with a 
>>> custom widget (showing various buttons inside the widget on mouse 
>>> over) and make it drag&dropable.
>>>
>>> I've attached a screen grab of what my working custom widget looks 
>>> like (with and without mouse over). I hope it comes through ok.
>>> I *just* need to be able to use this as a delegate somehow.
>>>
>>>
>>> Cheers,
>>> frank
>>>
>>>
>>>
>>>
>>> On 25/06/12 3:47 PM, Frank Rueter | OHUfx wrote:
>>>> Hi all,
>>>>
>>>>
>>>> I'm just re-writing part of my existing code to use the mode/view 
>>>> approach.
>>>>
>>>> I already have a complex custom widget which is a large button that 
>>>> can
>>>> be dragged and dropped, and that shows "sub buttons" on mouse over 
>>>> (i.e.
>>>> smaller rectangles are displayed in the corners on mouse over which 
>>>> act
>>>> as buttons in their own right).
>>>>
>>>> The whole widget works exactly like I want it to, but now I'm 
>>>> wondering
>>>> if it's possible to create a QStyledItemdelegate for the new 
>>>> model/view
>>>> approach to do the same thing. It will need the same event handling as
>>>> my custom widget, such as enterEvent, leaveEvent, mouseReleaseEvent,
>>>> mousePressEvent, mouseReleaseEvent and mouseMoveEvent.
>>>>
>>>> Is this possible with a delegate? Or can it be achieved in other ways?
>>>> Any pointers would be much appreciated.
>>>>
>>>> Cheers,
>>>> frank
>>>>
>>>> _______________________________________________
>>>> PySide mailing list
>>>> PySide at qt-project.org
>>>> http://lists.qt-project.org/mailman/listinfo/pyside
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> PySide mailing list
>>> PySide at qt-project.org
>>> http://lists.qt-project.org/mailman/listinfo/pyside
>>
>>
>>
>>
>> _______________________________________________
>> PySide mailing list
>> PySide at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/pyside
>
>
>
>
> _______________________________________________
> PySide mailing list
> PySide at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/pyside


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20120703/c3c3d001/attachment.html>


More information about the PySide mailing list