目录
一、QClipboard的简介
QClipboard类提供了对窗口系统剪贴板的访问。继承了QObject。
#include "qclipboard.h"
二、QClipboard的公有成员
void clear()
bool supportsSelection () const
bool ownsSelection() const
bool ownsClipboard() const
void setSelectionMode ( bool enable)
bool selectionModeEnabled () const
QMimeSource * data() const
void setData( QMimeSource * src)
QString text() const
QString text( QCString & subtype )const
void setText(const QString & text)
QImage image() const
QPixmap pixmap() const
void setImage(const QImage & image)
void setPixmap(const QPixmap & pixmap)
三、QClipboard的信号
void selectionChanged ()
void dataChanged()
四、QClipboard的详细描述
QClipboard类提供了对窗口系统剪贴板的访问。
剪贴板提供了一种在应用程序之间复制和粘贴数据的简单机制。
QClipboard支持和QDragObject一样的数据类型,并且使用类似的机制。有关剪贴板高级的用法请阅读拖放文档。
在应用程序中只有一个QClipboard,并且你可以使用QApplication::clipboard()来访问它。
实例:
QClipboard提供了一些有特色的很方便的函数来访问普通数据类型:setText()允许在应用程序之间Unicode文本的交换,setPixmap()和setImage()允许在应用程序之间交换QPixmap和QImage。setData()函数在功能上是最灵活的:它允许你把任何QMimeSource添加到剪贴板。每种方式都有相应的获得函数,例如text()、image()和pixmap()。
你可以通过调用clear()清空剪贴板。
X窗口系统和微软的Windows底层的剪贴板是不同的。X窗口系统有一个选择的概念——当文本被选择,它立即被复制到选择缓冲;微软的Windows仅仅在文本被显示地复制或者剪切的时候才被复制到剪贴板。X窗口系统还有一个所有权的概念,如果你在一个窗口中改变了选择,X11仅仅通知变化的拥有者和前任拥有者,在微软的Windows是剪贴板是一个完完全全的全局资源,所以所有应用程序被通知了变化。请参考Qt设计器实例中的multiclip实例,这是一个也描述了选择处理的多平台剪贴板应用程序。也可以参考环境类和输入/输出和网络。
五、QClipboard的成员函数文档
void QClipboard::clear ()
清空剪贴板内容。
QMimeSource *QClipboard::data () const
返回代表当前剪贴板数据的QMimeSource的引用。
void QClipboard::dataChanged ()[信号]
当剪贴板内容发生变化时,这个信号被发射。
QImage QClipboard::image () const
返回剪贴板图片,或者如果剪贴板没有包含任何图片或者它包含一个不被支持的格式的图片,返回一个无效的图片。也可以参考setImage()、pixmap()、data()和QImage::isNull()。
bool QClipboard::ownsClipboard ()const
如果剪贴板对象拥有剪贴板数据,返回真,否则返回假。
bool QClipboard::ownsSelection ()const
如果剪贴板对象拥有鼠标选择数据,返回真,否则返回假。
QPixmap QClipboard::pixmap () const
返回剪贴板像素映射,或者如果剪贴板不包含像素映射,返回无效的像素映射。注意这样会导致丢失信息。例如,如果图片是24位并且显示是8位,结果会被转换为8位,并且如果这个图象有一个alpha通道,结果会只有一个面具。也可以参考setPixmap()、image()、data()和QPixmap::convertFromImage()。
void QClipboard::selectionChanged ()[信号]
当选择发生变化时,这个信号被发射。这仅仅适用于支持选择的窗口系统,例如X11。Windows不支持选择。
bool QClipboard::selectionModeEnabled ()const
返回选择模式。也可以参考setSelectionMode()和supportsSelection()。
void QClipboard::setData ( QMimeSource * src)
设置剪贴板数据位src。数据的所有权被传递给剪贴板。如果你想移除这个数据,请调用clear()或者使用新数据再次调用setData()。
QDragObject子类是可以放到剪贴板中的合理对象(但是不要试图在同一个对象上调用QDragObject::drag())。任何被放置到剪贴板中的QDragObject的父对象都必须为0。不要把QDragMoveEvent或QDropEvent的子类放到剪贴板中,因为它们不属于接收到它们的事件处理器。
void QClipboard::setImage (const QImage & image)
把image复制到剪贴板。
这是一个快速的方式:
void QClipboard::setPixmap (const QPixmap & pixmap)
void QClipboard::setSelectionMode (bool enable )
设置剪贴板选择模式。如果enable为真,那么后来对QClipboard::setData()的调用以及其它把数据放到简帖板的函数都将会把数据放到鼠标选择中,否则数据将会被放到剪贴板中。
也可以参考supportsSelection()和selectionModeEnabled()。
void QClipboard::setText ( const QString & text)
把text作为简单文本复制到剪贴板中。
bool QClipboard::supportsSelection ()const
如果剪贴板支持鼠标选择,返回真,否则返回假。
QString QClipboard::text ( QCString & subtype) const
返回子类型为subtype的剪贴板文本,或者如果剪贴板不包含任何文本,返回一个无效字符串。如果subtype为空,任何子类型都是可以接受的,并且subtype被设置为被选择的子类型。
subtype的值应为“plain”和“html”。
也可以参考setText()、data()和QString::operator!()。
QString QClipboard::text () const
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
返回纯文本格式的剪贴板文本,或者如果剪贴板不包含任何文本,返回一个无效字符串。
也可以参考setText()、data()和QString::operator!()。
六、QClipboard的使用例子
QClipboard类提供对窗口系统剪贴板的访问。
剪贴板提供了在应用程序之间复制和粘贴数据的简单机制。
通过QClipboard提供的一些函数,可以实现复制文字,复制图片、文件的操作。以下是对这些操作的接口使用:
复制文本:
通过setText(const QString &text, Mode mode = Clipboard)函数设置:
它表示将文本作为纯文本复制到剪贴板中
mode参数用于控制使用系统剪贴板的哪一部分。默认Clipboard。
如果mode为QClipboard::Clipboard,文本存储在全局剪贴板中。
如果mode为QClipboard::Selection,文本存储在全局鼠标选择中。
如果mode为QClipboard::FindBuffer,文本存储在搜索字符串缓冲区中(macOS上使用)。
通常我们只使用QClipboard::Clipboard。
void Widget::on_pushButton_clicked()
{
QClipboard *clip = QApplication::clipboard();
clip->setText("hello world!");
}
复制图片:
setPixmap(const QPixmap &pixmap, Mode mode = Clipboard):表示复制QPixmap到剪贴板。
比setImage()慢,因为它需要首先将QPixmap转换为QImage,这是一个耗时操作。
void MainWindow::on_pushButton_clicked()
{
//复制图像,可粘贴到画图中
QImage *image=new QImage();
image->load("G:/Qt_coding/clipboard/test.png");
QClipboard *clip=QApplication::clipboard();
clip->setPixmap(QPixmap::fromImage(*image));
//clip->setImage(*image);
}
复制文件:
setMimeData(QMimeData *src, Mode mode = Clipboard):
表示将剪贴板数据设置为QMimeData数据,QMimeData支持文本、html、图片、文件等。
void MainWindow::on_pushButton_clicked()
{
QList<QUrl> copyfile;
QUrl url=QUrl::fromLocalFile("G:\\test.txt"); //待复制的文件
if(url.isValid()){
copyfile.push_back(url);
}else{
return;
}
QMimeData *data=new QMimeData;
data->setUrls(copyfile);
QClipboard *clip=QApplication::clipboard();
clip->setMimeData(data);
}