9-3 处理剪贴板(Clipboard Handling)

很多应用程序使用Qt提供的剪贴板。例如:QTextEdit类提供了cut()copy()paste()槽函数,也能相应键盘的快捷键。客户程序只要编写很少的代码,甚至不写代码。

如果我们正在开发自己的类,可以使用函数QApplication::clipboard()得到Qt的剪贴板,该函数返回的是一个QClipboard类型对象的指针。使用这个指针很容器对剪贴板进行读写访问,调用setText()setImage()setPixmap()把数据写到剪贴板。调用text()image()pixmap()得到剪贴板里的数据。在第4章中的Spreadsheet程序中就是一个使用剪贴板的例子。

对于有些应用程序来说,Qt提供的剪贴板是不够用的。除了文本和图像等类型的数据,我们还想让程序支持更多类型的数据,让自己的程序和其他应用程序进行交互。这个问题和拖拽很相似,解决方法也是一样:继承类QMimeData,重新实现几个虚函数。

如果我们的程序用一个QMimeData子类支持拖拽,那么这个子类可以用在剪贴板中。用函数setMimeData()把数据写到剪贴板,函数mimeData()得到剪贴板的数据。

X11系统,通常会点击三键鼠标的中间键完成对选择数据的粘贴操作。在Qt中用一个单独的“选择”剪贴板。如果一个控件要支持这种剪贴板,同时也要支持标准的剪贴板,需要在QClipboard函数调用中使用QClipboard::Selection参数,下面的函数mouseReleaseEvent()是一个文本编辑器的鼠标相应函数,支持鼠标中键粘贴。

void MyTextEditor::mouseReleaseEvent(QMouseEvent *event)

{

    QClipboard *clipboard = QApplication::clipboard();

    if (event->button() == Qt::MidButton

            && clipboard->supportsSelection()) {

        QString text = clipboard->text(QClipboard::Selection);

        pasteText(text);

    }

}

X11中,supportsSelection()返回true。在其他平台上返回false

剪贴板中的数据改变时,QClipboard会发出QClipboard::dataChanged()信号。

 

 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值