首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Qt 學習之路(55):剪貼板操作全解析——文本、圖片與自定義類型

     編輯:關於C語言

剪貼板模型

系統剪貼板是跨進程數據交換的共享池。Qt 通過 QClipboard 封裝平台差異,支持文本、圖片、像素圖及自定義 MIME 數據。

基礎示例:文本讀寫

界面佈局


ClipboardDemo::ClipboardDemo(QWidget *parent)
    : QWidget(parent) {
    QVBoxLayout *main = new QVBoxLayout(this);
    QHBoxLayout *north = new QHBoxLayout;
    QHBoxLayout *south = new QHBoxLayout;

    QTextEdit *editor = new QTextEdit;
    QLabel *label = new QLabel("Text Input:");
    label->setBuddy(editor);

    QPushButton *copyBtn = new QPushButton("Set Clipboard");
    QPushButton *pasteBtn = new QPushButton("Get Clipboard");

    north->addWidget(label);
    north->addWidget(editor);
    south->addWidget(copyBtn);
    south->addWidget(pasteBtn);
    main->addLayout(north);
    main->addLayout(south);

    connect(copyBtn, &QPushButton::clicked, this, &ClipboardDemo::setClipboard);
    connect(pasteBtn, &QPushButton::clicked, this, &ClipboardDemo::getClipboard);
}

槽函數實現


void ClipboardDemo::setClipboard() {
    QClipboard *board = QApplication::clipboard();
    board->setText("Text from Qt Application");
}

void ClipboardDemo::getClipboard() {
    QClipboard *board = QApplication::clipboard();
    QString str = board->text();
    QMessageBox::information(this, "From clipboard", str);
}

核心 API 速查

操作方法說明
寫文本setText(QString)存儲 plain/text
讀文本text() → QString獲取 plain/text
寫圖片setImage(QImage)存儲 image/* 格式
讀圖片image() → QImage
寫像素圖setPixmap(QPixmap)針對屏幕顯示優化
讀像素圖pixmap() → QPixmap
通用寫入setMimeData(QMimeData*)支持自定義類型
通用讀取mimeData() → QMimeData*需自行解析

內置組件的自動支持

QTextEdit、QLineEdit 等已內置 Ctrl+C/V/X 處理,無需額外代碼。開發前請查閱文檔,避免重複造輪子。

自定義 MIME 類型

繼承 QMimeData,重寫 formats()、retrieveData(),配合 setMimeData() 實現任意類型跨進程傳遞(參考前文「自定義拖放數據對象」)。

X11 平台特有:主選區

Linux/X11 下鼠標中鍵(滾輪)點擊可粘貼「主選區」內容:


void MyEditor::mouseReleaseEvent(QMouseEvent *event) {
    QClipboard *cb = QApplication::clipboard();
    if (event->button() == Qt::MidButton && cb->supportsSelection()) {
        QString text = cb->text(QClipboard::Selection);
        pasteText(text);
    }
}

supportsSelection() 僅在 X11 返回 true。

監聽剪貼板變化


connect(QApplication::clipboard(), &QClipboard::dataChanged,
        this, &MyClass::onClipboardChanged);

總結

Qt 剪貼板操作極簡:QApplication::clipboard() 獲取單例 → setXxx()/xxx() 讀寫。善用 QMimeData 擴展類型,利用 dataChanged 實時響應。

本文出自 “豆子空間” 博客,原文地址:https://devbean.blog.51cto.com/448512/292229

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved