На этом шаге рассмотрим работу с буфером обмена.
Буфер обмена (Clipboard) обеспечивает возможность обмена данными между разными приложениями. Это один из самых популярных способов копирования данных из одного приложения в другое. Он представляет собой область памяти, к которой могут иметь доступ все запущенные в системе приложения. Любое из них может записывать или считывать информацию из буфера обмена.
Программы, работающие с буфером обмена, должны предоставлять стандартные команды: вырезать (cut), скопировать (сopy) и вставить (paste), и эти команды необходимо снабдить определенными комбинациями "горячих" клавиш, ускоряющих работу пользователя: Ctrl+X, Ctrl+C и Ctrl+V соответственно.
Для работы с буфером обмена в Qt используется класс QClipboard. Объект этого класса создается при запуске приложения автоматически и может существовать в приложении только в единственном числе.
Данные можно помещать в буфер обмена при помощи методов setText(), setPixmap(), setImage() или setMimeData(). Например:
QClipboard* pcb = QApplication::clipboard(); pcb->setText(lineEdit->text(), QClipboard::Clipboard);
Объект класса QClipboard отправляет сигнал dataChanged() каждый раз, когда одно из приложений помещает в буфер обмена новые данные. Если необходимо контролировать данные, размещенные в буфере обмена, то этот сигнал соединяют с соответствующим слотом. Например:
connect(pcb,SIGNAL(dataChanged()),this,SLOT(paste()));
При помощи метода setMimeData() можно помещать в буфер обмена данные любого типа. Метод принимает указатель на объект класса, унаследованного от класса QMimeSource. QMimeSource — это абстрактный класс, являющийся основой для типов данных, которые могут быть преобразованы в другие форматы.
С помощью методов text(), image(), pixmap() и mimeData() данные получают из буфера обмена. Например:
QString str = pcb->text(); if (!str.isNull()) { label->setText(str); }
В примере, приведенном на рисунке 1, реализована работа с буфером обмена, рассмотренная выше.
Рис.1. Пример использования буфера обмена
Файлы приложения можно взять здесь.
На следующем шаге рассмотрим остальные классы событий.