[PyKDE] contextMenuEvent for QTableView column headers
N. Volbers
mithrandir42 at web.de
Mon Jan 15 05:56:51 GMT 2007
> On Sun 14-Jan-07 21:20, N. Volbers wrote:
>> Hello everyone,
>>
>> I am relatively new to pyQt and I have a question regarding the
>> QTableView. I have derived a view class from QTableView class and I
>> have implemented a context menu by adding a method like this:
>>
>> def contextMenuEvent(self, event):
>> self.datasetMenu.exec_(event.globalPos())
>>
>> where datasetMenu is a Menu I have created in the constructor.
>>
>> This works very nicely, but I noticed that the popup will only be
>> created when clicking inside of the tableview. However, I would like to
>> present a context menu when the user clicks on the column header.
>>
>> What can I do to achieve this?
>>
>> Niklas Volbers.
>
> In Qt 4 the easiest way to get a context menu is _not_ to reimplement
> the context menu event, but instead to
> (1) Set the context menu policy on the widget you are interested in,
> i.e. QWidget.setContextMenuPolicy(Qt.ActionsContextMenu), then
> (2) Add the actions you want to appear in the menu to the widget with
> QWidget.addAction(action1), etc.
>
> So for your particular example, do this both to your QTableView, and to
> the widget you get from QTableView.horizontalHeader().
>
> I haven't tried this with a horizontalHeader() myself though.
>
Thanks for your reply.
It works for the horizontalHeader() as well.
The final solution to my problem looks a little different, I am now
calling a custom function, because I would like to check some things
before displaying the context menu:
self.setContextMenuPolicy(Qt.CustomContextMenu)
self.connect(self, SIGNAL("customContextMenuRequested(const
QPoint &)"), self.on_context_menu_table)
hdr = self.horizontalHeader()
hdr.setContextMenuPolicy(Qt.CustomContextMenu)
hdr.connect(hdr, SIGNAL("customContextMenuRequested(const
QPoint &)"), self.on_context_menu_header)
In the handler, I am using something like this
self.datasetMenu.exec_(self.cursor().pos())
Best regards,
Niklas Volbers.
More information about the PyQt
mailing list