我最近做了一个QT mindmap的项目,用了一下QPlainTextEdit,但是出现了不能复制的情况。实际上只需要舰艇Ctrl+c和Ctrl+x按键事件就行了。我的核心代码函数为:

void keyPressEvent(QKeyEvent* ev) Q_DECL_OVERRIDE
{
update();

if (isReadOnly() && ev->key() == Qt::Key_Space) { //禁止按空格键后编辑功能
setReadOnly(true);
}
else if (!isReadOnly() && ev->key() == Qt::Key_Escape) {
setReadOnly(true);
}
else if (!isReadOnly() && ev->key() == Qt::Key_Tab) {
setReadOnly(true);
m_parent->keyPressEvent(ev);
}
else if (!isReadOnly() && ev->key() == Qt::Key_Return && (ev->modifiers() & Qt::ShiftModifier) == 0) {
setReadOnly(true);
m_parent->keyPressEvent(ev);
}else if((ev->key() == Qt::Key_C || ev->key() == Qt::Key_X) &&
ev->modifiers() == Qt::ControlModifier){ //复制粘贴
copy();

}
else if (!isReadOnly()) {
QPlainTextEdit::keyPressEvent(ev);
}
else {
m_parent->keyPressEvent(ev);
}
}

核心代码为:

else if((ev->key() == Qt::Key_C || ev->key() == Qt::Key_X) &&
ev->modifiers() == Qt::ControlModifier){
copy();

}

然后再复制QPlainTextEdit上的内容就能复制成功了。

参考文献

[1].qtQPlainTextEdit复制内容粘贴到excel中的问题. ​​http://blog.sina.com.cn/s/blog_6b2dd2620102yvyp.html​