0

我的菜单栏中有一个QLineEdit小部件,默认情况下显示文本“按 ID 搜索” 。如何为 QLineEdit 实现 MouseClicked 事件处理程序,这样当我单击 LineEdit 小部件时,默认文本被清除并且用户可以输入他想要搜索的文本?

至今

#ifndef SEARCH_H
#define SEARCH_H
#include<QLineEdit>

class search : public QLineEdit
{
        signals:
                void clicked();

        protected:
                void mousePressEvent(QMouseEvent *);
};
#endif
4

2 回答 2

0

您只需要将 QLineEdit::mousePressEvent ( QMouseEvent * e ) 信号与函数连接起来。当这个信号将被发出时,在你的函数中清除 QLineEdit。很简单,不是吗?

编辑

或者如果你有

void mousePressEvent(QMouseEvent *);

在您的小部件中,您所需要的只是为该方法编写定义。当用户在 QLineEdit 上按下鼠标时,将调用此函数。像:

void search::mousePressEvent(QMouseEvent *e)
{
    myQLineEdit->setText("");
}

编辑 2

然后尝试这样做:

class YourWidget : public QLineEdit
{
    Q_OBJECT

    protected:

    void focusInEvent(QFocusEvent* e);
};

void YourWidget::focusInEvent(QFocusEvent* e)
{    
    if (e->reason() == Qt::MouseFocusReason)    
    {
      myQLineEdit->setText("");
    }

    // You might also call the parent method.
    QLineEdit::focusInEvent(e);
}
于 2012-07-05T14:49:02.783 回答
0

您需要使用QLineEdit::placeholderText属性。它显示了一个灰色文本,当用户开始编辑它时(即当它获得焦点时)它会消失。

QLineEdit * edit = new QLineEdit;
edit->setPlaceholderText("Search by ID");
于 2012-07-05T14:50:16.587 回答