【发布时间】:2009-06-27 11:04:17
【问题描述】:
在Linux中,文本选择后复制到缓冲区,所以我们可以通过单击鼠标中键来粘贴它。我认为这件事有一个特殊的缓冲区。我想用它。如何获取所选文本的数据?
- 操作系统:Linux
- 编程语言:c++
- 自有库:Qt
谢谢。
【问题讨论】:
在Linux中,文本选择后复制到缓冲区,所以我们可以通过单击鼠标中键来粘贴它。我认为这件事有一个特殊的缓冲区。我想用它。如何获取所选文本的数据?
谢谢。
【问题讨论】:
只是比 Paul Dixon 更准确的答案,可以满足您的需求:
QClipboard* clipboard = QApplication::clipboard();
QString selectedText = clipboard->text(QClipboard::Selection);
【讨论】:
您需要区分选择和剪贴板。 QClipboard 文档在 Notes for X11 Users 部分中有此内容:
X11 Window System 有这个概念 一个单独的选择和剪贴板。 选择文本时,它是 立即可用作为全球 鼠标选择。全球鼠标 选择可以稍后被复制到 剪贴板。按照惯例,中间 鼠标按钮用于粘贴 全局鼠标选择。
使用QClipboard::Mode,您可以选择要访问的类型(剪贴板或选择)。重要的是您需要了解选择和剪贴板之间的区别。
【讨论】:
如果您使用的是 Qt,您是否阅读过 QClipboard 上的精美手册页?
QClipboard *clipboard = QApplication::clipboard();
QString clipboardText = clipboard->text();
【讨论】:
实际处理选择和粘贴系统的系统是X11 Windows。例如,当您在最喜欢的编辑器中绘制一些文本时,应用程序会发送 X11 请求,该请求会告诉 X11 服务器您有一个活动选择。如果您随后在某处单击鼠标中键,X11 服务器会查询告诉服务器有关实际内容选择的应用程序。然后将内容转发给接收应用程序。
像 Qt 这样的库为这种机制提供了包装器,但底层机制是 X11。
【讨论】: