「Qtの基礎 - クリップボード」の版間の差分
(→概要) |
|||
35行目: | 35行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> | ||
== テキストのクリップボード操作 == | |||
以下の例では、テキストのクリップボード操作において、ユーザはテキストを入力して、クリップボードに設定およびクリップボードから取得している。<br> | |||
<syntaxhighlight lang="c++"> | |||
// TextClipboardExample.hファイル | |||
#include <QApplication> | |||
#include <QClipboard> | |||
#include <QMainWindow> | |||
#include <QPushButton> | |||
#include <QVBoxLayout> | |||
#include <QLabel> | |||
#include <QLineEdit> | |||
class TextClipboardExample : public QMainWindow | |||
{ | |||
Q_OBJECT | |||
private: | |||
QLineEdit *textInput; | |||
QLabel *statusLabel; | |||
public: | |||
TextClipboardExample(QWidget *parent = nullptr) : QMainWindow(parent) | |||
{ | |||
setWindowTitle("Text Clipboard Example"); | |||
QVBoxLayout *layout = new QVBoxLayout; | |||
textInput = new QLineEdit(this); | |||
QPushButton *setTextButton = new QPushButton("Set Text to Clipboard", this); | |||
QPushButton *getTextButton = new QPushButton("Get Text from Clipboard", this); | |||
statusLabel = new QLabel("Status: ", this); | |||
layout->addWidget(textInput); | |||
layout->addWidget(setTextButton); | |||
layout->addWidget(getTextButton); | |||
layout->addWidget(statusLabel); | |||
QWidget *centralWidget = new QWidget(this); | |||
centralWidget->setLayout(layout); | |||
setCentralWidget(centralWidget); | |||
connect(setTextButton, &QPushButton::clicked, this, &TextClipboardExample::setTextToClipboard); | |||
connect(getTextButton, &QPushButton::clicked, this, &TextClipboardExample::getTextFromClipboard); | |||
} | |||
private slots: | |||
void setTextToClipboard() | |||
{ | |||
QClipboard *clipboard = QApplication::clipboard(); | |||
QString text = textInput->text(); | |||
// クリップボードに設定 | |||
clipboard->setText(text); | |||
statusLabel->setText("Status: Text set to clipboard: " + text); | |||
} | |||
void getTextFromClipboard() | |||
{ | |||
QClipboard *clipboard = QApplication::clipboard(); | |||
// クリップボードの内容を取得 | |||
QString text = clipboard->text(); | |||
textInput->setText(text); | |||
statusLabel->setText("Status: Text retrieved from clipboard: " + text); | |||
} | |||
}; | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="c++"> | |||
// main.cppファイル | |||
#include "TextClipboardExample.h" | |||
int main(int argc, char *argv[]) | |||
{ | |||
QApplication app(argc, argv); | |||
TextClipboardExample window; | |||
window.show(); | |||
return app.exec(); | |||
} | |||
</syntaxhighlight> | |||
<br><br> | |||
== 画像のクリップボード操作 == | |||
以下の例では、画像のクリップボード操作において、画像をクリップボードに設定およびクリップボードから画像を取得している。<br> | |||
これは、画像操作とクリップボードとの間でのデータ転送を示している。<br> | |||
<syntaxhighlight lang="c++"> | |||
// ImageClipboardExample.hファイル | |||
#include <QApplication> | |||
#include <QClipboard> | |||
#include <QMainWindow> | |||
#include <QPushButton> | |||
#include <QVBoxLayout> | |||
#include <QLabel> | |||
#include <QPixmap> | |||
class ImageClipboardExample : public QMainWindow | |||
{ | |||
Q_OBJECT | |||
private: | |||
QLabel *statusLabel; | |||
QLabel *imageLabel; | |||
public: | |||
ImageClipboardExample(QWidget *parent = nullptr) : QMainWindow(parent) | |||
{ | |||
setWindowTitle("Image Clipboard Example"); | |||
QVBoxLayout *layout = new QVBoxLayout; | |||
QPushButton *setImageButton = new QPushButton("Set Image to Clipboard", this); | |||
QPushButton *getImageButton = new QPushButton("Get Image from Clipboard", this); | |||
statusLabel = new QLabel("Status: ", this); | |||
imageLabel = new QLabel(this); | |||
imageLabel->setFixedSize(200, 200); | |||
imageLabel->setScaledContents(true); | |||
layout->addWidget(setImageButton); | |||
layout->addWidget(getImageButton); | |||
layout->addWidget(statusLabel); | |||
layout->addWidget(imageLabel); | |||
QWidget *centralWidget = new QWidget(this); | |||
centralWidget->setLayout(layout); | |||
setCentralWidget(centralWidget); | |||
connect(setImageButton, &QPushButton::clicked, this, &ImageClipboardExample::setImageToClipboard); | |||
connect(getImageButton, &QPushButton::clicked, this, &ImageClipboardExample::getImageFromClipboard); | |||
} | |||
private slots: | |||
void setImageToClipboard() | |||
{ | |||
QPixmap pixmap(100, 100); | |||
pixmap.fill(Qt::red); | |||
QClipboard *clipboard = QApplication::clipboard(); | |||
// 画像をクリップボードに設定 | |||
clipboard->setPixmap(pixmap); | |||
imageLabel->setPixmap(pixmap); | |||
statusLabel->setText("Status: Image set to clipboard"); | |||
} | |||
void getImageFromClipboard() | |||
{ | |||
QClipboard *clipboard = QApplication::clipboard(); | |||
// クリップボードから画像を取得 | |||
QPixmap pixmap = clipboard->pixmap(); | |||
if (!pixmap.isNull()) { | |||
// 取得した画像が有効な場合 | |||
imageLabel->setPixmap(pixmap); | |||
statusLabel->setText("Status: Image retrieved from clipboard"); | |||
} | |||
else { | |||
// 取得した画像が無効な場合 | |||
statusLabel->setText("Status: No image in clipboard"); | |||
} | |||
} | |||
}; | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="c++"> | |||
// main.cppファイル | |||
#include "ImageClipboardExample.h" | |||
int main(int argc, char *argv[]) | |||
{ | |||
QApplication app(argc, argv); | |||
ImageClipboardExample window; | |||
window.show(); | |||
return app.exec(); | |||
} | |||
</syntaxhighlight> | |||
<br><br> | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:Qt]] | [[カテゴリ:Qt]] |
2024年9月7日 (土) 04:48時点における版
概要
Qtでは、QClipboard
クラスを使用してクリップボード操作を行う。
このクラスは、システムのクリップボードとアプリケーション間のデータ転送を管理するものである。
クリップボードの基本的な機能は、データのコピー、切り取り、貼り付けである。
QClipboard
クラスは、テキスト、画像、カスタムデータ型等、様々な形式のデータをサポートしている。
データの設定には、QClipboard::setText
メソッドやQClipboard::setImage
メソッド等を使用する。
一方、データの取得には、QClipboard::text
メソッドやQClipboard::image
等のメソッドを使用する。
Qtでは、複数のクリップボードモードをサポートしている。
主なものとしては、通常のクリップボード、選択クリップボード (主にX11システムで使用)、検索クリップボードがある。
クリップボードの変更を監視する場合は、QClipboard::dataChanged
シグナルに接続することにより、
クリップボードの内容が変更された場合に通知を受け取ることができる。
また、Qtでは、MIME型を使用して複雑なデータ構造をクリップボードに保存することも可能である。
これにより、アプリケーション間で豊富なデータ交換が可能になる。
クリップボードの操作は非同期で行われるため、大量のデータを扱う場合はパフォーマンスに注意が必要である。
必要に応じて、バックグラウンドスレッドでの処理を検討するとよい。
クリップボードを使用する
クリップボードをコントロールするには、以下のように記述する。
クリップボードに値をコピーする場合、setText
メソッド、setImage
メソッド、setPixmap
メソッド、setMimeData
メソッドを使用する。
取得する場合、text
メソッド、Image
メソッド、pixmap
メソッド、mimeData
メソッドを使用する。
// クリップボードのインスタンスを取得する
auto clipboad = QApplication::clipboard();
// テキストをクリップボードにコピーする
clipboad->setText(str);
テキストのクリップボード操作
以下の例では、テキストのクリップボード操作において、ユーザはテキストを入力して、クリップボードに設定およびクリップボードから取得している。
// TextClipboardExample.hファイル
#include <QApplication>
#include <QClipboard>
#include <QMainWindow>
#include <QPushButton>
#include <QVBoxLayout>
#include <QLabel>
#include <QLineEdit>
class TextClipboardExample : public QMainWindow
{
Q_OBJECT
private:
QLineEdit *textInput;
QLabel *statusLabel;
public:
TextClipboardExample(QWidget *parent = nullptr) : QMainWindow(parent)
{
setWindowTitle("Text Clipboard Example");
QVBoxLayout *layout = new QVBoxLayout;
textInput = new QLineEdit(this);
QPushButton *setTextButton = new QPushButton("Set Text to Clipboard", this);
QPushButton *getTextButton = new QPushButton("Get Text from Clipboard", this);
statusLabel = new QLabel("Status: ", this);
layout->addWidget(textInput);
layout->addWidget(setTextButton);
layout->addWidget(getTextButton);
layout->addWidget(statusLabel);
QWidget *centralWidget = new QWidget(this);
centralWidget->setLayout(layout);
setCentralWidget(centralWidget);
connect(setTextButton, &QPushButton::clicked, this, &TextClipboardExample::setTextToClipboard);
connect(getTextButton, &QPushButton::clicked, this, &TextClipboardExample::getTextFromClipboard);
}
private slots:
void setTextToClipboard()
{
QClipboard *clipboard = QApplication::clipboard();
QString text = textInput->text();
// クリップボードに設定
clipboard->setText(text);
statusLabel->setText("Status: Text set to clipboard: " + text);
}
void getTextFromClipboard()
{
QClipboard *clipboard = QApplication::clipboard();
// クリップボードの内容を取得
QString text = clipboard->text();
textInput->setText(text);
statusLabel->setText("Status: Text retrieved from clipboard: " + text);
}
};
// main.cppファイル
#include "TextClipboardExample.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
TextClipboardExample window;
window.show();
return app.exec();
}
画像のクリップボード操作
以下の例では、画像のクリップボード操作において、画像をクリップボードに設定およびクリップボードから画像を取得している。
これは、画像操作とクリップボードとの間でのデータ転送を示している。
// ImageClipboardExample.hファイル
#include <QApplication>
#include <QClipboard>
#include <QMainWindow>
#include <QPushButton>
#include <QVBoxLayout>
#include <QLabel>
#include <QPixmap>
class ImageClipboardExample : public QMainWindow
{
Q_OBJECT
private:
QLabel *statusLabel;
QLabel *imageLabel;
public:
ImageClipboardExample(QWidget *parent = nullptr) : QMainWindow(parent)
{
setWindowTitle("Image Clipboard Example");
QVBoxLayout *layout = new QVBoxLayout;
QPushButton *setImageButton = new QPushButton("Set Image to Clipboard", this);
QPushButton *getImageButton = new QPushButton("Get Image from Clipboard", this);
statusLabel = new QLabel("Status: ", this);
imageLabel = new QLabel(this);
imageLabel->setFixedSize(200, 200);
imageLabel->setScaledContents(true);
layout->addWidget(setImageButton);
layout->addWidget(getImageButton);
layout->addWidget(statusLabel);
layout->addWidget(imageLabel);
QWidget *centralWidget = new QWidget(this);
centralWidget->setLayout(layout);
setCentralWidget(centralWidget);
connect(setImageButton, &QPushButton::clicked, this, &ImageClipboardExample::setImageToClipboard);
connect(getImageButton, &QPushButton::clicked, this, &ImageClipboardExample::getImageFromClipboard);
}
private slots:
void setImageToClipboard()
{
QPixmap pixmap(100, 100);
pixmap.fill(Qt::red);
QClipboard *clipboard = QApplication::clipboard();
// 画像をクリップボードに設定
clipboard->setPixmap(pixmap);
imageLabel->setPixmap(pixmap);
statusLabel->setText("Status: Image set to clipboard");
}
void getImageFromClipboard()
{
QClipboard *clipboard = QApplication::clipboard();
// クリップボードから画像を取得
QPixmap pixmap = clipboard->pixmap();
if (!pixmap.isNull()) {
// 取得した画像が有効な場合
imageLabel->setPixmap(pixmap);
statusLabel->setText("Status: Image retrieved from clipboard");
}
else {
// 取得した画像が無効な場合
statusLabel->setText("Status: No image in clipboard");
}
}
};
// main.cppファイル
#include "ImageClipboardExample.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
ImageClipboardExample window;
window.show();
return app.exec();
}