复制,剪切和粘贴qlineEdit

时间:2015-02-22 09:46:21

标签: c++ qt5.4

我在我的应用程序中使用了不同的QLineEdit编辑框。 现在,我将在QLineEdit

内的文本上启用复制,剪切和过去功能

当我将函数的三个快捷方式连接到QLineEdit的公共插槽时,只有过去的功能才有效。复制和剪切不起作用。

当我在右键单击所选文本并按复制时检查contextmenu时,它不起作用。有人知道我做错了吗?

QShortcut pasteShortcut(QKeySequence(tr("Ctrl+V")), ui.lineEdit);
QShortcut cutShortcut(QKeySequence(tr("Ctrl+X")), ui.lineEdit);
QShortcut copyShortcut(QKeySequence(tr("Ctrl+C")), ui.lineEdit);

connect(&copyShortcut, SIGNAL(activated()), ui.lineEdit, SLOT(ui.lineEdit->copy()));
connect(&cutShortcut, SIGNAL(activated()), ui.lineEdit, SLOT(ui.lineEdit->cut()));
connect(&pasteShortcut, SIGNAL(activated()), ui.lineEdit, SLOT(ui.lineEdit->paste()));

1 个答案:

答案 0 :(得分:0)

SLOT宏的格式似乎错误。这应该是正确的:

connect(&copyShortcut, SIGNAL(activated()), ui.lineEdit, SLOT(copy()));
connect(&cutShortcut, SIGNAL(activated()), ui.lineEdit, SLOT(cut()));
connect(&pasteShortcut, SIGNAL(activated()), ui.lineEdit, SLOT(paste()));

通常,在使用SIGNALSLOT宏时,请始终使用Qt Creator的自动完成功能,因为弄错不会产生构建错误,但会导致运行时错误(因为宏参数作为字符串处理)并在运行时解决)。更好的是,使用the "new" Qt5 style connect syntax,它不使用宏,如果弄错了会产生构建错误。示例:

connect(&copyShortcut, &QShortCut::activated, ui.lineEdit, &QLineEdit::copy);

此外,请确保这些QShortcut对象的生存期足够长,但不要太长...

足够多的意思是,它们不应该是方法中的局部变量,因为这样,当方法返回时,它们将被销毁(如果使用模式对话框,并且希望快捷方式仅在对话框被使用时存在,则可以这样做)打开)。

太长的意思是,如果ui.lineEdit被销毁时还没有被销毁,那么ui.lineEdit销毁将尝试delete,因为您设置了它们的父对象。显然,这是行不通的,因为尚未为new分配它们,您很可能由于未定义的行为而崩溃。

如果不确定,请将其更改为指针,并使用new并让ui.lineEdit完成后清除它们。