在我的QLineEdit
中已经有一个文本,我想如果有人双击里面,那么文本就会消失(我会使用lineEdit->clear()
的那一部分)。有人能提出解决办法吗?我是Qt的新手。
谢谢
一个解决方案是通过继承QLineEdit
类来创建自己的小部件。在这里,你将重写mouseDoubleClickEvent方法。然后可以清除方法中的文本。
注意,通过双击清除文本是不标准的行为,它可能会激怒你的用户。我习惯的标准是选择文本/单词
假设您确实需要这样的行为,您可以对小部件应用事件过滤器。完整的示例如下:
// https://github.com/KubaO/stackoverflown/tree/master/questions/doubleclick-clear-filter-39227270
#include <QtWidgets>
class ClearOnDoubleClick : public QObject {
bool eventFilter(QObject *watched, QEvent *event) {
if (event->type() == QEvent::MouseButtonDblClick)
QMetaObject::invokeMethod(watched, "clear");
return QObject::eventFilter(watched, event);
}
public:
explicit ClearOnDoubleClick(QObject * parent = nullptr) : QObject{parent} {
addTo(parent);
}
void addTo(QObject * obj) {
if (obj) obj->installEventFilter(this);
}
};
int main(int argc, char ** argv) {
QApplication app{argc, argv};
QWidget ui;
QVBoxLayout layout{&ui};
QLineEdit edit;
layout.addWidget(&edit);
ui.show();
ClearOnDoubleClick clear{&edit};
return app.exec();
}
通过继承QLIneEdit类创建您自己的自定义LineEdit。
重写鼠标单击事件,并将所需的代码(lineEdit.clear())放入被重写的函数中。