我想在我的程序中进行以下操作:我的QLineEdit
内已有文字,我想做以下内容:如果有人双击内部,那么文本将消失(我会对该部分使用lineEdit->clear()
命令。有人可以为此提出解决方案吗?我在Qt中有点新鲜。
谢谢
答案 0 :(得分:2)
一种解决方案是通过继承QLineEdit
类来创建自己的小部件。在那里你将覆盖mouseDoubleClickEvent方法。然后,您可以清除方法内的文本。
请注意,通过双击清除文本是非标准行为,这可能会让您的用户感到愤怒。标准我习惯于选择文字/单词。
答案 1 :(得分:1)
假设您确实需要此类行为,则可以将事件过滤器应用于窗口小部件。完整的例子如下:
// 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();
}
答案 2 :(得分:0)
通过继承QLIneEdit类来创建自己的自定义LineEdit。
覆盖鼠标单击事件,并在覆盖的功能中创建所需的代码(lineEdit.clear())。