我可以做一个事件,如果有人在QLineEdit内双击



在我的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())放入被重写的函数中。

相关内容

最新更新