0

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()));
4

1 回答 1

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的自动补全,因为弄错了不会产生构建错误,而是运行时错误(因为宏参数被当作字符串处理并在运行时解析)。更好的是,使用“新的”Qt5 风格的连接语法,它不使用宏并且如果你弄错了会产生构建错误。例子:

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

另外,确保这些QShortcut对象的生命周期足够长,但不要太长......

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

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

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

于 2019-03-07T21:26:09.690 回答