QTextEdit 和 QLineEdit 都有 placeholderText 屬性,即在輸入內容之前,給予用戶一些提示信息。
但是其二者該屬性對於不同輸入法有不同的表現。具體表現在:
1、QLineEdit 當輸入內容時,placeholderText內容會自動清空;
2、QTextEdit 當輸入內容時,placeholderText內容不會自動清空,必須按下空格或者回車鍵,才能將其清空,同時也會將輸入內容顯示到QTextEdit中去。
這樣的話,就會出現輸入法的輸入顯示框的內容和QTextEdit的placeholderText內容形成重疊的現象。如下圖所示:
解決辦法:
重新實現 QTextEdit 的inputMethodEvent方法。
頭文件:
#ifndef COMMENTTEXTEDIT_H
#define COMMENTTEXTEDIT_H
#include <QTextEdit>
#include <QInputMethodEvent>
class CommentTextEdit : public QTextEdit
{
Q_OBJECT
public:
CommentTextEdit(QWidget *parent = 0);
~CommentTextEdit();
protected:
virtual void inputMethodEvent(QInputMethodEvent *e);
};
#endif // COMMENTTEXTEDIT_H
實現文件:
#include "CommentTextEdit.h"
#include <QDebug>
CommentTextEdit::CommentTextEdit(QWidget *parent)
: QTextEdit(parent)
{
}
CommentTextEdit::~CommentTextEdit()
{
}
void CommentTextEdit::inputMethodEvent(QInputMethodEvent *e)
{
if(e->preeditString().isEmpty())
{
this->setPlaceholderText(tr("想要交換名片"));
}
else
{
this->setPlaceholderText(QString::null);
}
QTextEdit::inputMethodEvent(e);
}