<br><br><div class="gmail_quote">On Fri, Mar 6, 2009 at 12:05 PM, Jim Bublitz <span dir="ltr">&lt;<a href="mailto:jbublitz@nwinternet.com">jbublitz@nwinternet.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div><div><span id="q_11fdd14ff0dc544f_0" class="h4">- Show quoted text -</span></div><div class="h5">On Friday 06 March 2009 09:06:03 am Andreas Pakulat wrote:<br>
&gt; On 06.03.09 08:40:17, Jim Bublitz wrote:<br>
&gt; &gt; On Friday 06 March 2009 06:53:01 am Marc Nations wrote:<br>
&gt; &gt; &gt; Hi,<br>
&gt; &gt; &gt; I&#39;m trying to create a custom table which pops up a menu when the<br>
&gt; &gt; &gt; user right clicks. This part works ok. It looks like this:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; class Table(QtGui.QTableWidget):<br>
&gt; &gt; &gt;     def __init__(self, parent,  gui):<br>
&gt; &gt; &gt;         QtGui.QTableWidget.__init__(self, parent)<br>
&gt; &gt; &gt;         self.gui = gui<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;     def mouseReleaseEvent(self, event):<br>
&gt; &gt; &gt;         if event.button() == QtCore.Qt.RightButton:<br>
&gt; &gt; &gt;             self.rightClickMenu(event)<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;     def rightClickMenu(self,  event):<br>
&gt; &gt; &gt;         pos = event.pos<br>
&gt; &gt; &gt;         self.gui.ui.menuEdit.popup(QtGui.QCursor.pos())<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; The problem is that the default before of left click is changed,<br>
&gt; &gt; &gt; and I can&#39;t reset it. Without the mods the left clicks acts where<br>
&gt; &gt; &gt; if a multiple selection is made then clicking on another table<br>
&gt; &gt; &gt; cell de-selects all the previous items (unless a modifier key is<br>
&gt; &gt; &gt; used). With the above method, once multiple selections are made<br>
&gt; &gt; &gt; then it basically goes into &lt;shift&gt; mode and all previous<br>
&gt; &gt; &gt; selections are kept. I can&#39;t figure out a way to turn that off.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Is there a way to cherry pick which mouse events you want and<br>
&gt; &gt; &gt; ignore the rest, basically letting them keep their default<br>
&gt; &gt; &gt; behavior? Because it looks like once the function is taken over<br>
&gt; &gt; &gt; then the default behaviors are lost.<br>
&gt; &gt;<br>
&gt; &gt; Look at QWidget.contextMenuEvent - it catches only right clicks.<br>
&gt; &gt; Overload that.<br>
&gt; &gt;<br>
&gt; &gt; If you want to grab those on the vertical or horizontal headers, I<br>
&gt; &gt; think you&#39;ll have to install an event filter on the respective<br>
&gt; &gt; QHeaderViews (QObject.installEventFilter) and grab only<br>
&gt; &gt; QContextMenuEvents for those objects.<br>
&gt;<br>
&gt; The header views are qwidgets as well, so I don&#39;t see why that would<br>
&gt; be necessary.<br>
<br>
</div></div>Because you&#39;d have to subclass them and replace the QTableWidget&#39;s<br>
original headers. It seems easier to install an event filter, but<br>
either method would work.<br>
<div class="im"><br>
&gt; Apart from that, its even possible without overriding any base class,<br>
&gt; using QWidget.setContextMenuPolicy (set to Qt.CustomContextMenu) and<br>
&gt; catching the customContextMenuRequested() signal from the same<br>
&gt; widget.<br>
<br>
</div>That&#39;s probably easier than installing an event filter - wasn&#39;t aware of<br>
that.<br>
<font color="#888888"><br>
Jim<br></font></blockquote><div><br></div><div><br></div><div>Got it working. Here&#39;s the code for posterity:</div><div><br></div><div><div><br></div></div><div><div>        tableWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)</div>
<div>        QtCore.QObject.connect(tableWidget, QtCore.SIGNAL(&quot;customContextMenuRequested(QPoint)&quot;), self.contextMenu)</div><div>                </div><div>    def contextMenu(self,  event):</div><div>        self.gui.ui.menuEdit.popup(QtGui.QCursor.pos())</div>
<div><br></div><div><br></div><div>Deceptively simple, but solves both problems. I don&#39;t have to sub-class the Table Widget, and I can simply borrow a menu I created with Qt Designer and not have to add it all in manually. Awesome.</div>
<div><br></div><div>Thanks for all the help.</div></div><div></div></div>