В Linux после выделения текста он копируется в буфер, чтобы мы могли вставить его, щелкнув среднюю кнопку мыши. Думаю, для этого есть специальный буфер. Я хочу этим воспользоваться. Как я могу получить данные о выделенном тексте?

  • ОС: Linux
  • Язык программирования: c ++
  • Собственные библиотеки: Qt

Спасибо.

3
Max Frai 27 Июн 2009 в 15:04

4 ответа

Лучший ответ

Просто более точный ответ, чем у Пола Диксона, который отвечает вашим потребностям:

QClipboard* clipboard = QApplication::clipboard();
QString selectedText = clipboard->text(QClipboard::Selection);
6
Idan K 27 Июн 2009 в 17:10

Система, которая фактически обрабатывает выбор и вставку, - это X11 Windows. Когда вы, например, рисуете текст в своем любимом редакторе, приложение отправляет запрос X11, который сообщает серверу X11, что у вас есть активный выбор. Если вы затем щелкните где-нибудь средней кнопкой мыши, сервер X11 запросит приложение, которое сообщило серверу о выборе фактического содержимого. Затем содержимое пересылается в приложение-получатель.

Такие библиотеки, как Qt, предоставляют оболочки для этого механизма, но основным механизмом является X11.

1
Antti Huima 27 Июн 2009 в 20:08

Если вы используете Qt, читали ли вы прекрасную страницу руководства на QClipboard? ?

QClipboard *clipboard = QApplication::clipboard();
QString clipboardText = clipboard->text();
1
Paul Dixon 27 Июн 2009 в 11:06

Вам нужно различать выделение и буфер обмена. В документации QClipboard это есть в Примечаниях для X11. Раздел Пользователи:

В оконной системе X11 есть концепция отдельного выделения и буфера обмена. Когда текст выделен, он сразу становится доступен как глобальный выбор мыши. Глобальный выбор мыши может быть позже скопирован в буфер обмена. По соглашению, средняя кнопка мыши используется для вставки глобального выделения мыши.

С помощью QClipboard::Mode вы можете выбрать, к какому типу (буфер обмена или выделение) вы хотите получить доступ. Важная часть состоит в том, что вам нужно знать разницу между выделением и буфером обмена.

3
bluebrother 27 Июн 2009 в 20:28