Qt剪贴板操作在OSX测试中不起作用

时间:2014-07-30 08:20:48

标签: python macos qt

我有一个小部件,其中mac快捷键Command + C以交互方式正常工作,内容正确存储在剪贴板中。

我正在尝试在单元测试中实现相同的行为。它适用于其他平台,但不适用于Mac。

    expected_clipboard = "whatever"
    self._widget.show()
    Test.processEvents()

    QtTest.QTest.keyClick(self._widget, QtCore.Qt.Key_C, QtCore.Qt.ControlModifier)
    Test.processEvents()

    current_clipboard= QtGui.qApp.clipboard().text()
    self.assertEqual(current_clipboard, expected_clipboard) # Fails.

根据Qt文档,ControlModifier是Mac上Command的正确对应实体。我也是出于好奇而尝试过MetaModifier,但它没有用。

使用以下代码正确附加操作

       self._action = QtGui.QAction('text', self) 
       action.connect(self._action, QtCore.SIGNAL('triggered()'), self.copyAction)
       self._action.setShortcut(QtGui.QKeySequence.Copy)
       self.addAction(self._action)

Qt 4.8最新,osx 10.8。

1 个答案:

答案 0 :(得分:0)

好的,问题是窗口必须是可见的,引发的和激活的,否则OSX不会传递事件。只需调用widget.raise_()和widget.activateWindow()

即可