如果有人在QLineEdit中双击,我可以举办活动吗?

时间:2016-08-30 12:17:08

标签: c++ qt

我想在我的程序中进行以下操作:我的QLineEdit内已有文字,我想做以下内容:如果有人双击内部,那么文本将消失(我会对该部分使用lineEdit->clear()命令。有人可以为此提出解决方案吗?我在Qt中有点新鲜。

谢谢

3 个答案:

答案 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())。