首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制、切割和通过qlineEdit

复制、切割和通过qlineEdit
EN

Stack Overflow用户
提问于 2015-02-22 09:46:20
回答 1查看 1.5K关注 0票数 0

我在应用程序中使用不同的QLineEdit编辑。现在,我将在QLineEdit中的文本上启用复制、剪切和过去功能。

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

此外,当我检查contextmenu时,右键单击选定的文本并按下副本,它将不起作用。有人知道我做错了什么吗?

代码语言:javascript
复制
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()));
EN

回答 1

Stack Overflow用户

发布于 2019-03-07 21:26:09

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

代码语言:javascript
复制
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的自动完成,因为出错不会产生构建错误,但会产生运行时错误(因为宏参数作为字符串处理,并在运行时解析)。更好的是,使用“新”Qt5样式连接语法,它不使用宏,如果您弄错了,就会产生生成错误。示例:

代码语言:javascript
复制
connect(&copyShortcut, &QShortCut::activated, ui.lineEdit, &QLineEdit::copy);

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

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

太久意味着,如果在ui.lineEdit被销毁时它们还没有被销毁,那么ui.lineEdit销毁将尝试对它们进行delete,因为您设置了它们的父级。这显然不起作用,因为它们没有与new一起分配,您很可能会因为未定义的行为而导致崩溃。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28656475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档