alphanumeric
alphanumeric

Reputation: 19349

How to move modal dialog

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

Answers (1)

Joe
Joe

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

Related Questions