QTextEdit 的 placeholderText 属性
QTextEdit 和 QLineEdit 都有 placeholderText 属性,即在输入内容之前,给予用户一些提示信息。
但是其二者该属性对于不同输入法有不同的表现。具体表现在:
1、QLineEdit 当输入内容时,placeholderText内容会自动清空;
2、QTextEdit 当输入内容时,placeholderText内容不会自动清空,必须按下空格或者回车键,才能将其清空,同时也会将输入内容显示到QTextEdit中去。
实现文件:
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);
}