QClipboard: Использование буфера обмена в Qt

QClipboard: Использование буфера обмена в Qt

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

В Qt для взаимодействия с буфером обмена удобно использовать класс QClipboard. Он позволяет отслеживать изменения в буфере обмена и добавлять в него произвольную информацию.

Разработаем простое приложение, которое формирует список строк текста, добавленных в буфер обмена за время его работы. А затем позволяет по двойному клику перенести нужный текст из списка в буфер обмена:

qclipboard-demo-sample

Заголовочный файл mainwidget.h:

Здесь лишь обратим внимание на заготовки двух слотов: onClipboardChanged() — обработчик сигнала, когда в буфер обмена что-либо добавляется; и onListDbClicked() — обработчик сигнала двойного клика на строке списка QListWidget.

Реализация mainwidget.cpp:

Получить экземпляр QClipboard мы можем от класса приложения:

Чтобы получать уведомления об изменениях в буфере обмена, связываем сигнал dataChanged() с заранее заготовленным обработчиком onClipboardChanged().

Логика чтения содержимого буфера обмена строится на QMimeData. Ранее мы уже сталкивались с этим классом, когда говорили о Drag&Drop в Qt.

Вставка в буфер обмена с помощью QClipboard интуитивно понятна и похожа на этап Drag в процедуре Drag&Drop. Заметим, что перед добавлением строки в буфер обмена мы отключаем обработчик сигнала dataChanged(), а после подключаем его вновь:

Если бы мы этого не делали, то наше приложение фиксировало изменения в буфере обмена, которые само и спровоцировало.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий