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

Reply via email to