Linux и буфер обмена - PullRequest
       33

Linux и буфер обмена

2 голосов
/ 27 июня 2009

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

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

Спасибо.

Ответы [ 4 ]

6 голосов
/ 27 июня 2009

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

QClipboard* clipboard = QApplication::clipboard();
QString selectedText = clipboard->text(QClipboard::Selection);
3 голосов
/ 28 июня 2009

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

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

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

1 голос
/ 28 июня 2009

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

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

1 голос
/ 27 июня 2009

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

QClipboard *clipboard = QApplication::clipboard();
QString clipboardText = clipboard->text();
...