それでは表題の件をやっていきます。
C++ GUI Programming with Qt4にはサンプルが載っていないので独自のサンプルを使います。
それではコードを
(テキストをクリップボードにセットし、取り出す。)
//アプリケーションのグローバルクリップボードのポインタを返す。
QClipboard *clipboard = QApplication::clipboard();
//テキストをセット
clipboard->setText("SampleClipBoard!");
//テキストの取り出し
QString str = QApplication::clipboard()->text();
(イメージをクリップボードにセットし、取り出す)
//アプリケーションのグローバルクリップボードのポインタを返す。
QClipboard *clipboard = QApplication::clipboard();
//イメージをセット
clipboard->setImage(QImage("/home/ubuntu001/icon.png"));
//イメージの取り出し
QImage img = QApplication::clipboard()->text();
(QPixmapをクリップボードにセットし、取り出す)
//アプリケーションのグローバルクリップボードのポインタを返す。
QClipboard *clipboard = QApplication::clipboard();
//QPixmapをセット
clipboard->setPixmap(QPixmap("/home/ubuntu001/icon.png"));
//QPixmapの取り出し
QPixmap pixmap = QApplication::clipboard()->pixmap();
(QMimeDataをクリップボードにセットし、取り出す)
//アプリケーションのグローバルクリップボードのポインタを返す。
QClipboard *clipboard = QApplication::clipboard();
QMimeData *mime = new QMimeData();
mime->setText("Hello World!");
//QMimeDataをセット
clipboard->setMimeData(mime);
//QMimeDataの取り出し
const QMimeData *myMimeData = QApplication::clipboard()->mimeData();
//なおQMimeDataの独自サブクラスをsetMimeDataで登録することもできるようです。
([ X11 window system ] 中ボタンクリックによる “selection” からのペースト)
※gnomeとかでできるあの "マウスで文字列選択→マウスの中ボタンで選択中文字列ペースト" のことです。
void MyTextEditor::mouseReleaseEvent(QMouseEvent *event)
{
QClipboard *clipboard = QApplication::clipboard();
if (event->button() == Qt::MidButton
&& clipboard->supportsSelection())
{
//QClipboard::Selectionを引数にすれば“selection”にアクセスできる
//という意味。
QString text = clipboard->text(QClipboard::Selection);
pasteText(text);
}
}
その他QClipboard::Modeでクリップボードの使用の制御ができるそうです。詳しくはリファレンスを参照してください。
※なお、QClipboard::dataChanged()シグナルのキャッチによりクリップボードの変更を監視できます。
以下のような感じで
//thisはMainWindow //setLabelText()はクリックボード内のテキストをMainWindow内の //ラベルに表示する処理を行っています。 connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(setLabelText()));
接続すればクリップボードの変更を検知して処理ができます。
(slot,signalがわからない方はQtをはじめようを参照してください。)
以上です。
