Reputation: 19349
The code below creates QMainWindow
. Right clicking within its frame calls up
function.
This function makes self.modal
modal QDialog
unhidden.
Question: why self.modal QDialog is not moving to QCusrsor position as it is requested by self.modal.move(QtGui.QCursor.pos())
line inside of scope of 'up()' function?
from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])
class AppWindow(QtGui.QMainWindow):
def __init__(self):
super(AppWindow, self).__init__()
mainWidget=QtGui.QWidget()
self.setCentralWidget(mainWidget)
mainLayout = QtGui.QVBoxLayout()
mainWidget.setLayout(mainLayout)
frame=QtGui.QFrame()
frame.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
frame.connect(frame, QtCore.SIGNAL("customContextMenuRequested(QPoint)" ), self.up)
mainLayout.addWidget(frame)
self.modal=QtGui.QDialog()
self.modal.setModal(True)
def up(self, QPos):
print 'up QPos: %s QCursor: %s'%( QPos, QtGui.QCursor.pos() )
self.modal.move(QtGui.QCursor.pos())
self.modal.show()
window=AppWindow()
window.show()
sys.exit(app.exec_())
Upvotes: 1
Views: 631
Reputation: 28356
QCursor.pos()
returns global screen coordinates. I believe QDialog.mov()
expects widget coordinates, so you have to translate with self.modal.move(QWidget.mapFromGlobal(QtGui.QCursor.pos()))
Upvotes: 1