それでは表題の件をやっていきます。
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をはじめようを参照してください。)
以上です。