<HTML>
<HEAD>
<TITLE>Re: [PyQt] QDockWidgetquestion</TITLE>
</HEAD>
<BODY>
<FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>If you want to catch mouse events in a parent, you should install or override an eventFilter.<BR>
<BR>
For example, here is an eventFilter I use on my main window to catch close events. &nbsp;You can catch mouse events or others in this way. &nbsp;&#8220;obj&#8221; is the object receiving the event and &#8220;event&#8221; is the event being received. &nbsp;Note that doing it this way is tricky. &nbsp;You may be better off making your own subclasses for all your widgets that can communicate to the mainwindow.<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;def eventFilter(self, obj, event):<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;controller = self.controller<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if obj == self.mw and event.type() == QEvent.Close:<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if controller and controller.db.ProcessesRunning():<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opt = QtGui.QMessageBox.question(self.mw,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Running Workflows&quot;,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;There are workflows still running, would you like to save these?\n&quot;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;(Saved workflows will restart when the throughput is run again.)&quot;,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QtGui.QMessageBox.Save | QtGui.QMessageBox.Discard |<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QtGui.QMessageBox.Cancel)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if opt == QtGui.QMessageBox.Cancel:<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.setAccepted(False)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return True<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.controller.db.disconnect()<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.controller.db.KillRunningProcesses()<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if res == QtGui.QMessageBox.Discard:<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.controller.db.ClearRunningProcesses()<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return QObject.eventFilter(self, obj, event)<BR>
<BR>
<BR>
<BR>
On 12/22/08 11:16 AM, &quot;Iliya Gogolev&quot; &lt;<a href="iliya@realdice.com">iliya@realdice.com</a>&gt; wrote:<BR>
<BR>
</SPAN></FONT><BLOCKQUOTE><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>Yes, you are right. But I did it for checking if i can catch the event :) I<BR>
added mousePressEvent &amp; mouse ReleaseEvent:<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;def mouseMoveEvent (self, p_event) :<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &quot;CustomDockWidget mouseMoveEvent&quot;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.ignore()<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;def mouseReleaseEvent(self, event) :<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &quot; CustomDockWidget &nbsp;mouseReleaseEvent&quot;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.ignore()<BR>
<BR>
I also added the output(or breakpoint) and it did not work :) Actually I<BR>
want to catch the mouse move event in the parent - QMainWindow, when the<BR>
left mouse button pressed.<BR>
I want to make something similar to Widget Box of Qt Designer(left docked<BR>
side). For example, when user wants to add a button to a canvas, he select<BR>
it, the button layout is shown and then user can drag and drop it to the<BR>
canvas.<BR>
I think the way to implement it is: when one of the buttons of Widget Box<BR>
was selected (by pressing left mouse button and it's still pressed), cache<BR>
the mouse event in MainWindow and change a position of button layout entity.<BR>
<BR>
<BR>
<BR>
<BR>
-----Original Message-----<BR>
From: <a href="pyqt-bounces@riverbankcomputing.com">pyqt-bounces@riverbankcomputing.com</a><BR>
[<a href="mailto:pyqt-bounces@riverbankcomputing.com">mailto:pyqt-bounces@riverbankcomputing.com</a>] On Behalf Of piotr malinski<BR>
Sent: Monday, December 22, 2008 5:38 PM<BR>
To: <a href="pyqt@riverbankcomputing.com">pyqt@riverbankcomputing.com</a><BR>
Subject: Re: [PyQt] QDockWidgetquestion<BR>
<BR>
If you want to catch mouse events that happen on the docked widget<BR>
then yout CustomDockWidget must have such methods (def<BR>
mouseSomethingEvent(self, event)).<BR>
_______________________________________________<BR>
PyQt mailing list &nbsp;&nbsp;&nbsp;<a href="PyQt@riverbankcomputing.com">PyQt@riverbankcomputing.com</a><BR>
<a href="http://www.riverbankcomputing.com/mailman/listinfo/pyqt">http://www.riverbankcomputing.com/mailman/listinfo/pyqt</a><BR>
<BR>
<BR>
--<BR>
Internal Virus Database is out-of-date.<BR>
Checked by AVG.<BR>
Version: 7.5.549 / Virus Database: 270.9.10/1814 - Release Date: 11/26/2008<BR>
8:53 PM<BR>
<BR>
<BR>
Internal Virus Database is out-of-date.<BR>
Checked by AVG.<BR>
Version: 7.5.549 / Virus Database: 270.9.10/1814 - Release Date: 11/26/2008<BR>
8:53 PM<BR>
<BR>
<BR>
I tried it too. It did not help.<BR>
<BR>
Sorry, I use QToolBox &nbsp;instead QTreeWidget, but there's no sense<BR>
<BR>
<BR>
From: Brian Kelley [<a href="mailto:kelley@eyesopen.com">mailto:kelley@eyesopen.com</a>]<BR>
Sent: Monday, December 22, 2008 5:00 PM<BR>
To: Iliya Gogolev; <a href="pyqt@riverbankcomputing.com">pyqt@riverbankcomputing.com</a><BR>
Subject: Re: [PyQt] QDockWidgetquestion<BR>
<BR>
QDockWidgets behave a little different than normal widgets. &nbsp;You need to<BR>
call &quot;setWidget&quot; to place a widget in a dock widget.<BR>
<BR>
<a href="http://doc.trolltech.com/4.4/qdockwidget.html">http://doc.trolltech.com/4.4/qdockwidget.html</a><BR>
<BR>
Try:<BR>
<BR>
CustomDockWidget(QDockWidget):<BR>
&nbsp;&nbsp;def __init__(self,parent):<BR>
&nbsp;&nbsp;&nbsp;&nbsp;QDockWidget.__init__(self, parent)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;self.tree = QTreeWidget(self)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;self.setWidget(self.tree)<BR>
<BR>
<BR>
On 12/22/08 9:54 AM, &quot;Iliya Gogolev&quot; &lt;<a href="iliya@realdice.com">iliya@realdice.com</a>&gt; wrote:<BR>
Hi everyone!<BR>
<BR>
<BR>
I added QTreeWidget to QDockWidget and then added it to MainWindow by<BR>
addDockWidget function:<BR>
<BR>
&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;<BR>
CustomDockWidget(QDockWidget):<BR>
&nbsp;&nbsp;&nbsp;&nbsp;def __init__(self,parent):<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QDockWidget.__init__(self, p_parent)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.tree = QTreeWidget(self)<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.<BR>
<BR>
<BR>
&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;<BR>
<BR>
class MainWindow(QMainWindow):<BR>
&nbsp;&nbsp;&nbsp;&nbsp;def __init__(self, &nbsp;p_parent = None):<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QMainWindow.__init__(self, &nbsp;p_parent)<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.customWidget = CustomDockWidget(self)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.addDockWidget (Qt.LeftDockWidgetArea, self.customWidget)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.<BR>
<BR>
I'm trying to catch mouse event in MainWindow when I click on the<BR>
QTreeWidget and no success.<BR>
<BR>
Any ideas?<BR>
<BR>
Thanks<BR>
<BR>
Internal Virus Database is out-of-date.<BR>
Checked by AVG.<BR>
Version: 7.5.549 / Virus Database: 270.9.10/1814 - Release Date: 11/26/2008<BR>
8:53 PM<BR>
<BR>
<BR>
_______________________________________________<BR>
PyQt mailing list &nbsp;&nbsp;&nbsp;<a href="PyQt@riverbankcomputing.com">PyQt@riverbankcomputing.com</a><BR>
<a href="http://www.riverbankcomputing.com/mailman/listinfo/pyqt">http://www.riverbankcomputing.com/mailman/listinfo/pyqt</a><BR>
<BR>
Internal Virus Database is out-of-date.<BR>
Checked by AVG.<BR>
Version: 7.5.549 / Virus Database: 270.9.10/1814 - Release Date: 11/26/2008<BR>
8:53 PM<BR>
<BR>
Internal Virus Database is out-of-date.<BR>
Checked by AVG.<BR>
Version: 7.5.549 / Virus Database: 270.9.10/1814 - Release Date: 11/26/2008<BR>
8:53 PM<BR>
<BR>
Internal Virus Database is out-of-date.<BR>
Checked by AVG.<BR>
Version: 7.5.549 / Virus Database: 270.9.10/1814 - Release Date: 11/26/2008<BR>
8:53 PM<BR>
<BR>
<BR>
_______________________________________________<BR>
PyQt mailing list &nbsp;&nbsp;&nbsp;<a href="PyQt@riverbankcomputing.com">PyQt@riverbankcomputing.com</a><BR>
<a href="http://www.riverbankcomputing.com/mailman/listinfo/pyqt">http://www.riverbankcomputing.com/mailman/listinfo/pyqt</a><BR>
<BR>
</SPAN></FONT></BLOCKQUOTE>
</BODY>
</HTML>