1.创建事件过滤器类,在主窗口中安装事件过滤器
class PasteFilter : public QObject { Q_OBJECT public: PasteFilter(QObject *parent = nullptr) : QObject(parent) {} protected: bool eventFilter(QObject *obj, QEvent *event) override { if (event->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = static_cast(event); if (keyEvent->modifiers() == Qt::ControlModifier && keyEvent->key() == Qt::Key_V) { QTextEdit *textEdit = qobject_cast(obj); if (textEdit) { QClipboard *clipboard = QApplication::clipboard(); QString clipboardText = clipboard->text(); QString quotedText = "\"" + clipboardText + "\""; QTextCursor cursor = textEdit->textCursor(); cursor.insertText(quotedText); return true; } } } return QObject::eventFilter(obj, event); } }; PasteFilter *pasteFilter = new PasteFilter(this); ui->textEdit->installEventFilter(pasteFilter); 2. 自定义控件,重写控件的event事件
void keyPressEvent(QKeyEvent *event) override { if (event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_V) { // 捕获 Ctrl+V 事件 QClipboard *clipboard = QApplication::clipboard(); QString originalText = clipboard->text(); QString quotedText = "\"" + originalText + "\""; // 插入带引号的文本 this->insertPlainText(quotedText); } else { // 调用基类的方法处理其他按键事件 QTextEdit::keyPressEvent(event); } }