复制、剪切并通过qlineEdit
Copy,Cut and past qlineEdit
我在应用程序中使用不同的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(©Shortcut, 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()));
这似乎是SLOT
宏的错误格式。这应该是正确的:
connect(©Shortcut, SIGNAL(activated()), ui.lineEdit, SLOT(copy()));
connect(&cutShortcut, SIGNAL(activated()), ui.lineEdit, SLOT(cut()));
connect(&pasteShortcut, SIGNAL(activated()), ui.lineEdit, SLOT(paste()));
通常,在使用SIGNAL
和SLOT
宏时,请始终使用Qt Creator的自动补全,因为出错不会产生生成错误,而是会产生运行时错误(因为宏参数作为字符串处理并在运行时解析)。更好的是,使用"新"的Qt5风格的连接语法,它不使用宏,如果你弄错了,可能会产生构建错误。示例:
connect(©Shortcut, &QShortCut::activated, ui.lineEdit, &QLineEdit::copy);
此外,请确保这些QShortcut
对象的生存期足够长,但不要太长。。。
足够长意味着,它们不应该是方法中的局部变量,因为当方法返回时,它们将被销毁(如果您使用模式对话框,并且希望快捷方式只在对话框打开时存在,这可能没问题)。
过长意味着,如果在ui.lineEdit
被销毁时它们还没有被销毁,那么ui.lineEdit
销毁将尝试delete
它们,因为您设置了它们的父级。这显然是行不通的,因为它们还没有分配给new
,你很可能会因为未定义的行为而崩溃。
如果不确定,请将它们更改为指针,然后使用new
,并在完成后让ui.lineEdit
清理它们。
相关文章:
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 使用strcpy将char数组的元素复制到另一个数组
- 是否可以初始化不可复制类型的成员变量(或基类)
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 复制列表初始化的隐式转换的等级是多少
- 当从函数参数中的临时值调用复制构造函数时
- 有可能在Armadillo中复制MATLAB circshift方法吗
- 复制几乎为空的数组的最快方法
- 以下示例中如何避免代码复制?C++/库达
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 不能将复制初始化与隐式转换的多个步骤一起使用
- Qt和C++:将QLineEdit添加到QTabWidget中
- 当有分配器意识的容器被复制/移动时,反弹分配器是否被复制/移走
- 为什么复制而不是移动数据元素?
- 文件系统:复制功能的速度秘诀是什么
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 复制、剪切并通过qlineEdit