qt QClipboard详解
1、概述
QClipboard是Qt框架中的一个类,它提供了对窗口系统剪贴板的访问能力。剪贴板是一个临时存储区域,通常用于在应用程序之间传递文本、图像和其他数据。QClipboard通过统一的接口来操作剪贴板内容,使得开发者能够方便地实现剪切、复制和粘贴功能。它支持处理各种数据格式,包括文本、图像和自定义数据,是Qt中用于与操作系统剪贴板交互的重要工具。
2、重要方法
QClipboard类提供了多个方法来设置和获取剪贴板的内容。以下是一些重要的方法:
setText(const QString &text)
: 将文本设置为剪贴板的内容。text() const
: 返回剪贴板中的文本内容。setImage(const QImage &image)
: 将图像设置为剪贴板的内容。image() const
: 返回剪贴板中的图像内容。setPixmap(const QPixmap &pixmap)
: 将像素映射(QPixmap)设置为剪贴板的内容。注意,这个方法比setImage()慢,因为它需要首先将QPixmap转换为QImage。pixmap() const
: 返回剪贴板中的像素映射内容。setData(const QMimeData *data)
: 使用QMimeData对象设置剪贴板的内容,这是设置剪贴板内容的灵活方式,允许添加任何类型的数据。mimeData() const
: 返回代表当前剪贴板数据的QMimeData对象的引用。clear()
: 清空剪贴板的内容。
3、重要信号
QClipboard类还提供了两个重要的信号,用于通知剪贴板内容的变化:
void selectionChanged()
: 当选择发生变化时,这个信号被发射。这仅仅适用于支持选择的窗口系统,例如X11。Windows不支持选择。void dataChanged()
: 当剪贴板内容发生变化时,这个信号被发射。- void changed(QClipboard::Mode mode):当剪贴板的内容改变时发出信号。
4、常用枚举类型
以下是 QClipboard 类中一些常用的枚举类型及其简要介绍:
QClipboard::Mode剪贴板模式:
- QClipboard::Clipboard:应用程序剪贴板。
- QClipboard::Selection:选择模式(通常仅限于X11系统)。
- QClipboard::FindBuffer:查找缓冲区(仅限于X11系统)。
#include <QApplication>
#include <QClipboard>
#include <QTextEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>
#include <QString>
#include <QDebug>class ClipboardExample : public QWidget {Q_OBJECTpublic:ClipboardExample(QWidget *parent = nullptr) : QWidget(parent) {QVBoxLayout *layout = new QVBoxLayout(this);QTextEdit *textEdit = new QTextEdit(this);layout->addWidget(textEdit);QPushButton *copyButton = new QPushButton("Copy to Clipboard", this);layout->addWidget(copyButton);QPushButton *pasteButton = new QPushButton("Paste from Clipboard", this);layout->addWidget(pasteButton);connect(copyButton, &QPushButton::clicked, [this, textEdit]() {QClipboard *clipboard = QApplication::clipboard();clipboard->setText(textEdit->toPlainText());qDebug() << "Text copied to clipboard:" << textEdit->toPlainText();});connect(pasteButton, &QPushButton::clicked, [this, textEdit]() {QClipboard *clipboard = QApplication::clipboard();QString text = clipboard->text();textEdit->setPlainText(text);qDebug() << "Text pasted from clipboard:" << text;});}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);ClipboardExample example;example.show();return app.exec();
}
觉得有帮助的话,打赏一下呗。。