Класс QClipboard
Класс QClipboard предоставляет доступ к буферу обмена операционной системы. Подробнее...
| Заголовок: | #include <QClipboard> |
| CMake: | find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| Наследует: | QObject |
Типы
| перечисление | Mode { Clipboard, Selection, FindBuffer } |
Открытые функции
| void | clear(QClipboard::Mode mode = Clipboard) |
| QImage | image(QClipboard::Mode mode = Clipboard) const |
| const QMimeData * | mimeData(QClipboard::Mode mode = Clipboard) const |
| bool | ownsClipboard() const |
| bool | ownsFindBuffer() const |
| bool | ownsSelection() const |
| QPixmap | pixmap(QClipboard::Mode mode = Clipboard) const |
| void | setImage(const QImage &image, QClipboard::Mode mode = Clipboard) |
| void | setMimeData(QMimeData *src, QClipboard::Mode mode = Clipboard) |
| void | setPixmap(const QPixmap &pixmap, QClipboard::Mode mode = Clipboard) |
| void | setText(const QString &text, QClipboard::Mode mode = Clipboard) |
| bool | supportsFindBuffer() const |
| bool | supportsSelection() const |
| QString | text(QClipboard::Mode mode = Clipboard) const |
| QString | text(QString &subtype, QClipboard::Mode mode = Clipboard) const |
Сигналы
| void | changed(QClipboard::Mode mode) |
| void | dataChanged() |
| void | findBufferChanged() |
| void | selectionChanged() |
Подробное описание
Буфер обмена предоставляет простой механизм копирования и вставки данных между приложениями.
QClipboard поддерживает те же типы данных, что и QDrag, и использует аналогичные механизмы. Для работы с буфером обмена в продвинутых случаях обратитесь к Перетаскивание и падение.
В приложении существует единственный объект QClipboard, доступный как QGuiApplication::clipboard().
Пример:
QClipboard *clipboard = QGuiApplication::clipboard(); QString originalText = clipboard->text(); // etc. clipboard->setText(newText);
Класс QClipboard имеет некоторые удобные функции для доступа к общим типам данных: setText() позволяет обмениваться текстом Юникод, а setPixmap() и setImage() позволяют обмениваться QPixmap и QImage между приложениями. Функция setMimeData() обеспечивает максимальную гибкость: она позволяет добавить любой QMimeData в буфер обмена. Существуют соответствующие функции-геттеры для каждого из них, например, text(), image() и pixmap(). Вы можете очистить буфер обмена, вызвав clear().
Типичный пример использования этих функций приведен ниже:
void DropArea::paste()
{
const QClipboard *clipboard = QApplication::clipboard();
const QMimeData *mimeData = clipboard->mimeData();
if (mimeData->hasImage()) {
setPixmap(qvariant_cast<QPixmap>(mimeData->imageData()));
} else if (mimeData->hasHtml()) {
setText(mimeData->html());
setTextFormat(Qt::RichText);
} else if (mimeData->hasText()) {
setText(mimeData->text());
setTextFormat(Qt::PlainText);
} else {
setText(tr("Cannot display data"));
}
} Примечания для пользователей X11
- Система окон X11 имеет понятие отдельного буфера обмена и выделения. Когда текст выделен, он сразу доступен как глобальное выделение мыши. Глобальное выделение мыши может быть скопировано в буфер обмена. По соглашению, средняя кнопка мыши используется для вставки глобального выделения мыши.
- В X11 также есть понятие владения; если вы измените выделение в окне, X11 уведомит только владельца и предыдущего владельца об изменении, т. е. он не уведомит все приложения о том, что данные выделения или буфера обмена изменились.
- Наконец, буфер обмена X11 устроен по принципу событий, т. е. буфер обмена не будет работать должным образом, если цикл обработки событий не запущен. Аналогично, рекомендуется хранить или извлекать содержимое буфера обмена в прямом ответе на события пользовательского ввода, например, нажатия и отпускания кнопок мыши или клавиш. Не следует хранить или извлекать содержимое буфера обмена в ответ на таймеры или события, не связанные с пользовательским вводом.
- Поскольку нет стандартного способа копирования и вставки файлов между приложениями в X11, в настоящее время используются различные типы MIME и соглашения. Например, Nautilus ожидает, что файлы будут предоставлены с типом MIME
x-special/gnome-copied-filesс данными, начинающимися с действия вырезания/копирования, символа новой строки и URL файла.
Примечания для пользователей macOS
macOS поддерживает отдельный буфер поиска, содержащий текущую строку поиска при выполнении операций поиска. Этот буфер поиска можно получить, указав режим FindBuffer.
Примечания для пользователей Windows и macOS
- Windows и macOS не поддерживают глобальное выделение мыши; они поддерживают только глобальный буфер обмена, т. е. они добавляют текст в буфер обмена только при явном копировании или вырезании.
- Windows и macOS не имеют понятия владения; буфер обмена — это полностью глобальный ресурс, поэтому все приложения уведомляются об изменениях.
См. также QGuiApplication.
Документация по типам членов
перечисление QClipboard::Mode
Этот тип перечисления используется для управления частью буфера обмена системы, которая используется функциями QClipboard::mimeData(), QClipboard::setMimeData() и другими.
| Константа | Значение | Описание |
|---|---|---|
QClipboard::Clipboard |
0 |
указывает, что данные должны храниться и извлекаться из глобального буфера обмена. |
QClipboard::Selection |
1 |
указывает, что данные должны храниться и извлекаться из глобального выделения мыши. Поддержка Selection предоставляется только на системах с глобальным выделением мыши (например, X11). |
QClipboard::FindBuffer |
2 |
указывает, что данные должны храниться и извлекаться из буфера поиска. Этот режим используется для хранения строк поиска в macOS. |
См. также QClipboard::supportsSelection().
Документация по функциям-членам
[signal] void QClipboard::changed(QClipboard::Mode mode)
Этот сигнал испускается при изменении данных для заданного режима буфера обмена mode.
См. также dataChanged(), selectionChanged() и findBufferChanged().
[signal] void QClipboard::dataChanged()
Этот сигнал испускается при изменении данных буфера обмена.
В macOS и с Qt версии 4.3 или выше изменения в буфере обмена, внесенные другими приложениями, будут обнаружены только при активации приложения.
См. также findBufferChanged(), selectionChanged() и changed().
[signal] void QClipboard::findBufferChanged()
Этот сигнал испускается при изменении буфера поиска. Это относится только к macOS.
С Qt версии 4.3 или выше изменения в буфере обмена, внесенные другими приложениями, будут обнаружены только при активации приложения.
См. также dataChanged(), selectionChanged() и changed().
[signal] void QClipboard::selectionChanged()
Этот сигнал испускается при изменении выделения. Это относится только к оконным системам, которые поддерживают выделение, например, X11. Windows и macOS не поддерживают выделение.
См. также dataChanged(), findBufferChanged() и changed().
void QClipboard::clear(QClipboard::Mode mode = Clipboard)
Очистить содержимое буфера обмена.
Аргумент mode используется для управления тем, какая часть системного буфера обмена используется. Если mode равен QClipboard::Clipboard, эта функция очищает глобальное содержимое буфера обмена. Если mode равен QClipboard::Selection, эта функция очищает содержимое глобального выделения мышью. Если mode равен QClipboard::FindBuffer, эта функция очищает буфер строки поиска.
См. также QClipboard::Mode и supportsSelection().
QImage QClipboard::image(QClipboard::Mode mode = Clipboard) const
Возвращает изображение из буфера обмена или возвращает пустое изображение, если буфер обмена не содержит изображение или если он содержит изображение в формате изображения, не поддерживаемом системой.
Аргумент mode используется для управления тем, какая часть системного буфера обмена используется. Если mode равен QClipboard::Clipboard, изображение извлекается из глобального буфера обмена. Если mode равен QClipboard::Selection, изображение извлекается из глобального выделения мышью.
См. также setImage(), pixmap(), mimeData() и QImage::isNull().
const QMimeData *QClipboard::mimeData(QClipboard::Mode mode = Clipboard) const
Возвращает указатель на представление QMimeData текущих данных буфера обмена (может быть nullptr если заданный mode не поддерживается платформой).
Аргумент mode используется для управления тем, какая часть системного буфера обмена используется. Если mode равен QClipboard::Clipboard, данные извлекаются из глобального буфера обмена. Если mode равен QClipboard::Selection, данные извлекаются из глобального выделения мышью. Если mode равен QClipboard::FindBuffer, данные извлекаются из буфера строки поиска.
Функции text(), image() и pixmap() являются более простыми обёртками для извлечения текстовых, графических и растровых данных соответственно.
Примечание: Возвращённый указатель может стать недействительным, когда содержимое буфера обмена изменяется; либо путём вызова одной из функций установщика, либо внешним образом изменением системного буфера обмена.
См. также setMimeData().
bool QClipboard::ownsClipboard() const
Возвращает true , если этот объект буфера обмена владеет данными буфера обмена; в противном случае возвращает false.
bool QClipboard::ownsFindBuffer() const
Возвращает true , если этот объект буфера обмена владеет данными буфера поиска; в противном случае возвращает false.
bool QClipboard::ownsSelection() const
Возвращает true , если этот объект буфера обмена владеет данными выделения мышью; в противном случае возвращает false.
QPixmap QClipboard::pixmap(QClipboard::Mode mode = Clipboard) const
Возвращает растровую графику из буфера обмена, или пустое значение, если буфер обмена не содержит растровую графику. Обратите внимание, что это может привести к потере информации. Например, если изображение 24-битное, а дисплей 8-битный, результат преобразуется в 8 бит, а если изображение имеет альфа-канал, результат содержит только маску.
Аргумент mode используется для управления тем, какая часть системного буфера обмена используется. Если mode равен QClipboard::Clipboard, растровое изображение извлекается из глобального буфера обмена. Если mode равен QClipboard::Selection, растровое изображение извлекается из глобального выделения мышью.
См. также setPixmap(), image(), mimeData() и QPixmap::convertFromImage().
void QClipboard::setImage(const QImage &image, QClipboard::Mode mode = Clipboard)
Копирует image в буфер обмена.
Аргумент mode используется для управления тем, какая часть системного буфера обмена используется. Если mode равен QClipboard::Clipboard, изображение сохраняется в глобальном буфере обмена. Если mode равен QClipboard::Selection, данные сохраняются в глобальном выделении мышью.
Это сокращение для:
QMimeData *data = new QMimeData; data->setImageData(image); clipboard->setMimeData(data, mode);
См. также image(), setPixmap() и setMimeData().
void QClipboard::setMimeData(QMimeData *src, QClipboard::Mode mode = Clipboard)
Устанавливает данные буфера обмена в src. Владение данными передаётся буферу обмена. Если вы хотите удалить данные, либо вызовите clear(), либо снова вызовите setMimeData() с новыми данными.
Аргумент mode используется для управления тем, какая часть системного буфера обмена используется. Если mode равен QClipboard::Clipboard, данные сохраняются в глобальном буфере обмена. Если mode равен QClipboard::Selection, данные сохраняются в глобальном выделении мышью. Если mode равен QClipboard::FindBuffer, данные сохраняются в буфере строки поиска.
Функции setText(), setImage() и setPixmap() — это более простые обёртки для установки текстовых, графических и растровых данных соответственно.
См. также mimeData().
void QClipboard::setPixmap(const QPixmap &pixmap, QClipboard::Mode mode = Clipboard)
Копирует pixmap в буфер обмена. Обратите внимание, что это медленнее, чем setImage(), так как ему необходимо сначала преобразовать QPixmap в QImage.
Аргумент mode используется для управления тем, какая часть системного буфера обмена используется. Если mode равен QClipboard::Clipboard, растровое изображение сохраняется в глобальном буфере обмена. Если mode равен QClipboard::Selection, растровое изображение сохраняется в глобальном выделении мышью.
См. также pixmap(), setImage() и setMimeData().
void QClipboard::setText(const QString &text, QClipboard::Mode mode = Clipboard)
Копирует text в буфер обмена как обычный текст.
Аргумент mode используется для управления тем, какая часть системного буфера обмена используется. Если mode равен QClipboard::Clipboard, текст сохраняется в глобальном буфере обмена. Если mode равен QClipboard::Selection, текст сохраняется в глобальном выделении мышью. Если mode равен QClipboard::FindBuffer, текст сохраняется в буфере строки поиска.
См. также text() и setMimeData().
bool QClipboard::supportsFindBuffer() const
Возвращает true , если буфер обмена поддерживает отдельный буфер поиска; в противном случае возвращает false.
bool QClipboard::supportsSelection() const
Возвращает true , если буфер обмена поддерживает выделение мышью; в противном случае возвращает false.
QString QClipboard::text(QClipboard::Mode mode = Clipboard) const
Возвращает текст из буфера обмена как обычный текст или пустую строку, если буфер обмена не содержит текста.
Аргумент mode используется для управления тем, какая часть системного буфера обмена используется. Если mode равен QClipboard::Clipboard, текст извлекается из глобального буфера обмена. Если mode равен QClipboard::Selection, текст извлекается из глобального выделения мышью. Если mode равен QClipboard::FindBuffer, текст извлекается из буфера строки поиска.
См. также setText() и mimeData().
QString QClipboard::text(QString &subtype, QClipboard::Mode mode = Clipboard) const
Это перегруженная функция.
Возвращает текст из буфера обмена в подтипе subtype или пустую строку, если буфер обмена не содержит текста. Если subtype равно null, любой подтип приемлем, и subtype устанавливается в выбранный подтип.
Аргумент mode используется для управления тем, какая часть буфера обмена системы используется. Если mode равен QClipboard::Clipboard, текст извлекается из глобального буфера обмена. Если mode равен QClipboard::Selection, текст извлекается из глобального выделения мышью.
Общие значения для subtype — "plain" и "html".
Обратите внимание, что многократное вызов этой функции, например, из обработчика событий клавиш, может быть медленным. В таких случаях вы должны использовать dataChanged() сигнал вместо неё.
См. также setText() и mimeData().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qclipboard.html