剪貼簿(QClipboard)

我們可以把剪貼簿當成一個數據存放地,外面的數據可以存進去,裡面數據可以取出來,剪貼簿是由操作系統維護的,所以提供了跨應用程式的數據傳遞方式。可以透過QApplication::clipboard()方法來取得剪貼簿,取得QClipboard之後,可以使用setImage()、setPixmap()、setText()等函式,將圖片或文字訊息設定至剪貼簿,使用text()、image()、pixmap()等函式從剪貼簿獲得數據。


範例包含一個QLineEdit和兩個QPushButton,當我們按下設定內容的按鍵時,會將此時QLineEdit的內容存到剪貼簿去,當我們按下得到內容的按鍵時,會跳出一訊息框顯示剪貼簿的內容。

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QApplication>

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
private slots:
    void setClipboardContent();
    void getClipboardContent();
private:
    QVBoxLayout *mainLayout;
    QHBoxLayout *btnLayout;
    QLineEdit *editor;
    QPushButton *setContentBtn;
    QPushButton *getContentBtn;
};

#endif 

widget.cpp

#include "widget.h"
#include <QClipboard>
#include <QMessageBox>

Widget::Widget(QWidget *parent) :
    QWidget(parent)
{
    setWindowTitle(tr("剪貼簿範例"));
    mainLayout = new QVBoxLayout(this);
    btnLayout = new QHBoxLayout(this);
    editor = new QLineEdit;
    setContentBtn = new QPushButton;
    setContentBtn->setText(tr("設定內容"));
    getContentBtn = new QPushButton;
    getContentBtn->setText(tr("得到內容"));

    btnLayout->addWidget(setContentBtn);
    btnLayout->addWidget(getContentBtn);
    mainLayout->addWidget(editor);
    mainLayout->addLayout(btnLayout);

    connect(setContentBtn, SIGNAL(clicked()), this, SLOT(setClipboardContent()));
    connect(getContentBtn, SIGNAL(clicked()), this, SLOT(getClipboardContent()));
}

void Widget::setClipboardContent(){
    QClipboard *board = QApplication::clipboard();
    QString str = editor->text();
    board->setText(str);
}

void Widget::getClipboardContent(){
    QClipboard *board = QApplication::clipboard();
    QString str = board->text();
    QMessageBox::information(NULL, tr("剪貼簿內容"), str);
}

main.cpp

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

QClipboard

QClipboard