- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个主窗口,我在其中建立了标准的“编辑”>“剪切/复制/粘贴”操作,菜单操作链接到 QTextEdit 的相关插槽,它是主窗口的子窗口。
主窗口有一个不同的子窗口(在拆分器的另一侧),它显示一个 TableView。此小部件具有单击以聚焦的聚焦策略和 KeyPressEvent 处理程序。当这个 child 获得焦点时,它的 KeyPressEvent 方法拦截所有击键事件(我知道,因为它在控制台上打印出来)除了 ctl-c、ctl-v 和分配给编辑或文件菜单操作的任何其他键序列.这些击键进入菜单并在没有焦点的 QTextEdit 中生效。
我希望能够在 TableView 中捕获 ^c 以复制表选择的值,但键序列永远不会到达那里。
我该怎么做才能使 ^c 操作对具有焦点的小部件可见?
最佳答案
创建编辑操作时,给它们一个 WidgetShortcut上下文和 add them与它们关联的小部件:
copyAction.setShortcutContext(Qt.WidgetShortcut)
editor.addAction(copyAction)
请注意,以这种方式配置的操作快捷方式不会覆盖关联小部件可能具有的任何内置快捷方式。
编辑
这是一个简单的演示。请注意,当 text-edit 具有键盘焦点时,“Ctrl+P”将触发处理程序,但“Ctrl+C”不会,因为它是内置快捷方式。当 table 具有键盘焦点时,“Ctrl+C”将照常复制所选项目,但“Ctrl+P”将不执行任何操作。
from PyQt4 import QtGui, QtCore
class Window(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
widget = QtGui.QWidget(self)
self.setCentralWidget(widget)
layout = QtGui.QVBoxLayout(widget)
self.edit = QtGui.QTextEdit(self)
self.edit.setText('text')
self.table = Table(self)
layout.addWidget(self.edit)
layout.addWidget(self.table)
menu = self.menuBar().addMenu('&File')
def add_action(text, shortcut):
action = menu.addAction(text)
action.setShortcut(shortcut)
action.triggered.connect(self.handleAction)
action.setShortcutContext(QtCore.Qt.WidgetShortcut)
self.edit.addAction(action)
add_action('&Copy', 'Ctrl+C')
add_action('&Print', 'Ctrl+P')
def handleAction(self):
print ('Action!')
class Table(QtGui.QTableWidget):
def __init__(self, parent):
QtGui.QTableWidget.__init__(self, parent)
self.setRowCount(4)
self.setColumnCount(2)
self.setItem(0, 0, QtGui.QTableWidgetItem('item'))
def keyPressEvent(self, event):
print ('keyPressEvent: %s' % event.key())
QtGui.QTableWidget.keyPressEvent(self, event)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
关于python - Qt 菜单快捷方式抢占子部件 KeyPressEvents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8275276/
我写了一段代码,其中有一个数据: unsigned char buf[4096]; // data in chunks of size 4k unsigned counter[256]; 我将每 3
这个问题已经有答案了: Ajax too slow - Recursion (1 个回答) 已关闭 5 年前。 所以这件事在我脑海里思考了很长时间,是否 AJAx 中给出的计时器在它必须发送另一个请求
据我所知,在 Linux 中有许多机制可以实现 bottom-halves: 软中断 任务 工作队列 线程中断 ( request_threaded_irq() ) 它们在可调度性方面都有自己的特点。
根据这个问题here使用 pthread_spin_lock 锁定关键部分是危险的,因为线程可能会被调度程序中断,而其他线程可能会在该资源上保持旋转状态。 假设我决定从 pthread_spin_lo
从SLF4J页面我明白了这一点 The purpose of slf4j-log4j12 module is to delegate or redirect calls made to an SLF4
我在我的项目中使用了 xuggle library 将视频从 mp4 转码为 flv。我也使用 slf4j 库 来支持日志结束。 import com.xuggle.mediatool.IMediaR
我是一名优秀的程序员,十分优秀!