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.
_______________________________________________
PyKDE mailing list [email protected]
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde