0

メニューバーQLineEditウィジェットがあり、デフォルトで「ID で検索」というテキストが表示されます。LineEdit ウィジェットをクリックすると、デフォルトのテキストがクリアされ、ユーザーが検索したいテキストを入力できるように、QLineEdit の MouseClicked イベント ハンドラーを実装するにはどうすればよいですか?

これまでのところ

#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 に答える