Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qclipboard.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "qclipboard.h"
5
6#ifndef QT_NO_CLIPBOARD
7
8#include "qmimedata.h"
9#include "qpixmap.h"
10#include "qvariant.h"
11#include "qbuffer.h"
12#include "qimage.h"
13#include "private/qstringconverter_p.h"
14
15#include "private/qguiapplication_p.h"
16#include <qpa/qplatformintegration.h>
17#include <qpa/qplatformclipboard.h>
18
20
21using namespace Qt::StringLiterals;
22
127QClipboard::QClipboard(QObject *parent)
128 : QObject(parent)
129{
130 // nothing
131}
132
141QClipboard::~QClipboard()
142{
143}
144
236{
237 const QMimeData *const data = mimeData(mode);
238 if (!data)
239 return QString();
240
241 const QStringList formats = data->formats();
242 if (subtype.isEmpty()) {
243 if (formats.contains("text/plain"_L1))
244 subtype = "plain"_L1;
245 else {
246 for (const auto &format : formats) {
247 if (format.startsWith("text/"_L1)) {
248 subtype = format.sliced(5);
249 break;
250 }
251 }
252 if (subtype.isEmpty())
253 return QString();
254 }
255 } else if (!formats.contains("text/"_L1 + subtype)) {
256 return QString();
257 }
258
259 const QByteArray rawData = data->data("text/"_L1 + subtype);
260 auto encoding = QStringConverter::encodingForData(rawData);
261 if (!encoding)
262 encoding = QStringConverter::Utf8;
263 return QStringDecoder(*encoding).decode(rawData);
264}
265
280{
281 const QMimeData *data = mimeData(mode);
282 return data ? data->text() : QString();
283}
284
303
318{
319 const QMimeData *data = mimeData(mode);
320 if (!data)
321 return QImage();
322 return qvariant_cast<QImage>(data->imageData());
323}
324
346
363{
364 const QMimeData *data = mimeData(mode);
365 return data ? qvariant_cast<QPixmap>(data->imageData()) : QPixmap();
366}
367
387
388
413{
415 if (!clipboard->supportsMode(mode)) return nullptr;
416 return clipboard->mimeData(mode);
417}
418
439{
441 if (!clipboard->supportsMode(mode)) {
442 if (src != nullptr) {
443 qDebug("Data set on unsupported clipboard mode. QMimeData object will be deleted.");
444 src->deleteLater();
445 }
446 } else {
447 clipboard->setMimeData(src,mode);
448 }
449}
450
465{
466 setMimeData(nullptr, mode);
467}
468
474{
475 return supportsMode(Selection);
476}
477
483{
484 return supportsMode(FindBuffer);
485}
486
492{
493 return ownsMode(Clipboard);
494}
495
501{
502 return ownsMode(Selection);
503}
504
512{
513 return ownsMode(FindBuffer);
514}
515
522bool QClipboard::supportsMode(Mode mode) const
523{
525 return clipboard && clipboard->supportsMode(mode);
526}
527
534bool QClipboard::ownsMode(Mode mode) const
535{
537 return clipboard && clipboard->ownsMode(mode);
538}
539
544void QClipboard::emitChanged(Mode mode)
545{
546 switch (mode) {
547 case Clipboard:
549 break;
550 case Selection:
552 break;
553 case FindBuffer:
555 break;
556 }
557
559}
560
562
563#include "moc_qclipboard.cpp"
564
565#endif // QT_NO_CLIPBOARD
\inmodule QtCore
Definition qbytearray.h:57
char * data()
\macro QT_NO_CAST_FROM_BYTEARRAY
Definition qbytearray.h:611
void setText(const QString &, Mode mode=Clipboard)
Copies text into the clipboard as plain text.
void setPixmap(const QPixmap &, Mode mode=Clipboard)
Copies pixmap into the clipboard.
void setMimeData(QMimeData *data, Mode mode=Clipboard)
Sets the clipboard data to src.
bool ownsClipboard() const
Returns true if this clipboard object owns the clipboard data; otherwise returns false.
void selectionChanged()
This signal is emitted when the selection is changed.
QImage image(Mode mode=Clipboard) const
Returns the clipboard image, or returns a null image if the clipboard does not contain an image or if...
const QMimeData * mimeData(Mode mode=Clipboard) const
Returns a pointer to a QMimeData representation of the current clipboard data (can be \nullptr if the...
bool supportsFindBuffer() const
Returns true if the clipboard supports a separate search buffer; otherwise returns false.
QString text(Mode mode=Clipboard) const
Returns the clipboard text as plain text, or an empty string if the clipboard does not contain any te...
void changed(QClipboard::Mode mode)
QPixmap pixmap(Mode mode=Clipboard) const
Returns the clipboard pixmap, or null if the clipboard does not contain a pixmap.
bool supportsSelection() const
Returns true if the clipboard supports mouse selection; otherwise returns false.
bool ownsFindBuffer() const
void dataChanged()
This signal is emitted when the clipboard data is changed.
void clear(Mode mode=Clipboard)
Clear the clipboard contents.
void findBufferChanged()
Mode
\keyword clipboard mode
Definition qclipboard.h:27
bool ownsSelection() const
Returns true if this clipboard object owns the mouse selection data; otherwise returns false.
void setImage(const QImage &, Mode mode=Clipboard)
Copies the image into the clipboard.
static QPlatformIntegration * platformIntegration()
\inmodule QtGui
Definition qimage.h:37
\inmodule QtCore
Definition qmimedata.h:16
void setText(const QString &text)
Sets text as the plain text (MIME type text/plain) used to represent the data.
void setImageData(const QVariant &image)
Sets the data in the object to the given image.
\inmodule QtCore
Definition qobject.h:103
Returns a copy of the pixmap that is transformed using the given transformation transform and transfo...
Definition qpixmap.h:27
The QPlatformClipboard class provides an abstraction for the system clipboard.
virtual bool ownsMode(QClipboard::Mode mode) const
virtual QMimeData * mimeData(QClipboard::Mode mode=QClipboard::Clipboard)
virtual void setMimeData(QMimeData *data, QClipboard::Mode mode=QClipboard::Clipboard)
virtual bool supportsMode(QClipboard::Mode mode) const
static Q_CORE_EXPORT std::optional< Encoding > encodingForData(QByteArrayView data, char16_t expectedFirstCharacter=0) noexcept
Returns the encoding for the content of data if it can be determined.
\inmodule QtCore
Q_WEAK_OVERLOAD EncodedData< const QByteArray & > decode(const QByteArray &ba)
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
QString sliced(qsizetype pos) const &
Definition qstring.h:394
bool isEmpty() const noexcept
Returns true if the string has no characters; otherwise returns false.
Definition qstring.h:192
QString text
EGLint EGLint * formats
Combined button and popup list for selecting options.
Definition image.cpp:4
#define qDebug
[1]
Definition qlogging.h:164
GLenum mode
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLenum src
GLint GLsizei GLsizei GLenum format
#define emit
QMimeData * mimeData
widget render & pixmap