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

Posted

技术标签:

【中文标题】Qt 剪贴板操作在 OSX 上的测试中不起作用【英文标题】:Qt Clipboard operation does not work in tests on OSX 【发布时间】:2014-07-30 08:20:47 【问题描述】:

我有一个小部件,其中 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】:

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

【讨论】:

以上是关于Qt 剪贴板操作在 OSX 上的测试中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

OSX移动光标事件在网络浏览器中不起作用

OSX 系统菜单栏在 JavaFX 中不起作用

preferredContentSize更改窗口大小在osx 10.12.6中不起作用

为啥 SendInput Ctrl+V 在 Outlook 中不起作用?

为啥 QMenu:hover 在 Qt Designer 中不起作用

断点在 Qt Creator 中不起作用