QClipboard 类

The QClipboard 类提供对窗口系统剪贴板的访问。 更多...

头: #include <QClipboard>
qmake: QT += gui
继承: QObject

公共类型

enum 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 ()

静态公共成员

const QMetaObject staticMetaObject

额外继承成员

详细描述

The QClipboard 类提供对窗口系统剪贴板的访问。

剪贴板提供在应用程序之间拷贝和粘贴数据的简单机制。

QClipboard 支持相同数据类型如 QDrag 所做的,且使用类似机制。对于高级剪贴板用法,阅读 拖放 .

存在单个 QClipboard 对象在应用程序中,可访问作为 QGuiApplication::clipboard ().

范例:

QClipboard *clipboard = QGuiApplication::clipboard();
QString originalText = clipboard->text();
...
clipboard->setText(newText);
					

QClipboard 特征化了一些访问常见数据类型的方便函数: setText () 允许交换 Unicode 文本和 setPixmap () 和 setImage () 允许交换 QPixmap 和 QImage 在应用程序之间。 setMimeData () 函数最具灵活性:它允许添加任何 QMimeData 到剪贴板。这些中的每个都有相应 Getter,如 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 期望提供文件按 x-special/gnome-copied-files MIME 类型,具有以剪切/拷贝动作开始的数据,换行符和文件 URL。

macOS 用户注意事项

macOS supports a separate find buffer that holds the current search string in Find operations. This find clipboard can be accessed by specifying the FindBuffer 模式。

Windows 和 macOS 用户注意事项

  • Windows and macOS do not support the global mouse selection; they only supports the global clipboard, i.e. they only add text to the clipboard when an explicit copy or cut is made.
  • Windows and macOS does not have the concept of ownership; the clipboard is a fully global resource so all applications are notified of changes.

UWP (通用 Windows 平台) 用户注意事项

  • UWP (通用 Windows 平台) 才允许查询剪贴板,若应用程序活动且应用程序窗口有聚焦。当在后台访问剪贴板数据时会失败,由于拒绝访问。

另请参阅 QGuiApplication .

成员类型文档编制

enum QClipboard:: Mode

此枚举类型用来控制系统剪贴板的哪一部分将用于 QClipboard::mimeData (), QClipboard::setMimeData () 和相关函数。

常量 描述
QClipboard::Clipboard 0 指示应该从全局剪贴板,存储和检索数据。
QClipboard::Selection 1 指示应该从全局鼠标选定,存储和检索数据。支持 Selection 仅在具有全局鼠标选定 (如 X11) 的系统中提供。
QClipboard::FindBuffer 2 indicates that data should be stored and retrieved from the Find buffer. This mode is used for holding search strings on macOS .

另请参阅 QClipboard::supportsSelection ().

成员函数文档编制

[signal] void QClipboard:: changed ( QClipboard::Mode mode )

此信号被发射当数据对于给定剪贴板 mode 改变。

该函数在 Qt 4.2 引入。

另请参阅 dataChanged (), selectionChanged (),和 findBufferChanged ().

void QClipboard:: clear ( QClipboard::Mode mode = Clipboard)

清零剪贴板内容。

The mode 自变量用于控制使用系统剪贴板的哪一部分。若 mode is QClipboard::Clipboard ,此函数清零全局剪贴板内容。若 mode is QClipboard::Selection ,此函数清零全局鼠标选定内容。若 mode is QClipboard::FindBuffer ,此函数清零搜索字符串缓冲。

另请参阅 QClipboard::Mode and supportsSelection ().

[signal] void QClipboard:: dataChanged ()

此信号被发射,当剪贴板数据改变时。

On macOS and with Qt version 4.3 or higher, clipboard changes made by other applications will only be detected when the application is activated.

另请参阅 findBufferChanged (), selectionChanged (),和 changed ().

[signal] void QClipboard:: findBufferChanged ()

This signal is emitted when the find buffer is changed. This only applies to macOS .

采用 Qt 4.3 或更高版本,由其它应用程序所做的剪贴板改变,仅当应用程序被激活时才检测。

该函数在 Qt 4.2 引入。

另请参阅 dataChanged (), selectionChanged (),和 changed ().

QImage QClipboard:: image ( QClipboard::Mode mode = Clipboard) const

返回剪贴板图像,或返回 null 图像若剪贴板不包含图像,或者若它包含不被支持的图像格式的图像。

The mode 自变量用于控制使用系统剪贴板的哪一部分。若 mode is QClipboard::Clipboard ,图像检索自全局剪贴板。若 mode is QClipboard::Selection ,图像检索自全局鼠标选定。

另请参阅 setImage (), pixmap (), mimeData (),和 QImage::isNull ().

const QMimeData *QClipboard:: mimeData ( QClipboard::Mode mode = Clipboard) const

返回指针指向 QMimeData 表示的当前剪贴板数据 (可以为 null 若给定 mode 不被平台支持)。

The mode 自变量用于控制使用系统剪贴板的哪一部分。若 mode is QClipboard::Clipboard ,数据检索自全局剪贴板。若 mode is QClipboard::Selection ,数据检索自全局鼠标选定。若 mode is QClipboard::FindBuffer ,数据检索自搜索字符串缓冲。

The text (), image (),和 pixmap () 函数是用于检索文本、图像及像素图数据的更简单包装器。

注意: 返回指针可能变为失效,当剪贴板内容改变时;通过调用某一 setter 函数或在外部通过系统剪贴板改变。

另请参阅 setMimeData ().

bool QClipboard:: ownsClipboard () const

返回 true 若此剪贴板对象拥有剪贴板数据;否则返回 false .

bool QClipboard:: ownsFindBuffer () const

返回 true 若此剪贴板对象拥有查找缓冲数据;否则返回 false .

该函数在 Qt 4.2 引入。

bool QClipboard:: ownsSelection () const

返回 true 若此剪贴板对象拥有鼠标选定数据;否则返回 false .

QPixmap QClipboard:: pixmap ( QClipboard::Mode mode = Clipboard) const

返回剪贴板像素图,或 null 若剪贴板不包含像素图。注意,这可能丢失信息。例如,若图像为 24 位和显示为 8 位,则结果将被转换为 8 位,且若图像拥有 Alpha 通道,则结果仅仅拥有遮罩。

The mode 自变量用于控制使用系统剪贴板的哪一部分。若 mode is QClipboard::Clipboard ,像素图检索自全局剪贴板。若 mode is QClipboard::Selection ,像素图检索自全局鼠标选定。

另请参阅 setPixmap (), image (), mimeData (),和 QPixmap::convertFromImage ().

[signal] void QClipboard:: selectionChanged ()

This signal is emitted when the selection is changed. This only applies to windowing systems that support selections, e.g. X11. Windows and macOS don't support selections.

另请参阅 dataChanged (), findBufferChanged (),和 changed ().

void QClipboard:: setImage (const QImage & image , QClipboard::Mode mode = Clipboard)

拷贝 image 到剪贴板。

The mode 自变量用于控制使用系统剪贴板的哪一部分。若 mode is QClipboard::Clipboard ,图像存储在全局剪贴板中。若 mode is 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() 再次采用新数据。

The mode 自变量用于控制使用系统剪贴板的哪一部分。若 mode is QClipboard::Clipboard ,数据存储在全局剪贴板中。若 mode is QClipboard::Selection ,数据存储在全局鼠标选定中。若 mode is QClipboard::FindBuffer ,数据存储在搜索字符串缓冲中。

The setText (), setImage () 和 setPixmap () 函数是分别设置文本、图像及像素图数据的更简单包装器。

另请参阅 mimeData ().

void QClipboard:: setPixmap (const QPixmap & pixmap , QClipboard::Mode mode = Clipboard)

拷贝 pixmap 到剪贴板。注意,这更慢相比 setImage () 因为它需要转换 QPixmap QImage 首先。

The mode 自变量用于控制使用系统剪贴板的哪一部分。若 mode is QClipboard::Clipboard ,像素图存储在全局剪贴板中。若 mode is QClipboard::Selection ,像素图存储在全局鼠标选定中。

另请参阅 pixmap (), setImage (),和 setMimeData ().

void QClipboard:: setText (const QString & text , QClipboard::Mode mode = Clipboard)

拷贝 text 到剪贴板以纯文本形式。

The mode 自变量用于控制使用系统剪贴板的哪一部分。若 mode is QClipboard::Clipboard ,文本存储在全局剪贴板中。若 mode is QClipboard::Selection ,文本存储在全局鼠标选定中。若 mode is QClipboard::FindBuffer ,文本存储在搜索字符串缓冲中。

另请参阅 text () 和 setMimeData ().

bool QClipboard:: supportsFindBuffer () const

返回 true 若剪贴板支持单独搜索缓冲;否则返回 false .

bool QClipboard:: supportsSelection () const

返回 true 若剪贴板支持鼠标选定;否则返回 false .

QString QClipboard:: text ( QClipboard::Mode mode = Clipboard) const

以纯文本形式返回剪贴板文本,或空字符串若剪贴板未包含任何文本。

The mode 自变量用于控制使用系统剪贴板的哪一部分。若 mode is QClipboard::Clipboard ,文本检索自全局剪贴板。若 mode is QClipboard::Selection ,文本检索自全局鼠标选定。若 mode is QClipboard::FindBuffer ,文本检索自搜索字符串缓冲。

另请参阅 setText () 和 mimeData ().

QString QClipboard:: text ( QString & subtype , QClipboard::Mode mode = Clipboard) const

这是重载函数。

返回剪贴板文本按子类型 subtype ,或空字符串若剪贴板未包含任何文本。若 subtype 为 null,任何子类型都可接受,和 subtype 被设为选取子类型。

The mode 自变量用于控制使用系统剪贴板的哪一部分。若 mode is QClipboard::Clipboard ,文本检索自全局剪贴板。若 mode is QClipboard::Selection ,文本检索自全局鼠标选定。

常见值对于 subtype 为 plain 和 html。

请注意,重复调用此函数 (例如:从键事件处理程序) 可能很慢。在这种情况下,应使用 dataChanged() 信号代替。

另请参阅 setText () 和 mimeData ().