很多应用程序使用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()信号。

 

 
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐