QTextEdit 实现 QLineEdit 的 setPlaceholderText() 和 setMaxLength ()函数

来源:互联网 发布:韵达快递软件 编辑:程序博客网 时间:2024/05/16 06:12

啰嗦

  在设置 QLineEdit  默认提示语和最大可输入长多时,可以很方便的调用自带的 setPlaceholderText() 和 setMaxLength ()函数来实现,可是在用到多行文本输入的地方要用到QTextEdit ,但是 QTextEdit 并未自带这个两个函数,那么要实现这个功能只能自己另外写了。


实现

实现起来也很简单,主要是处理 focusInEvent 和 focusOutEvent 俩个事件,另外需要设置默认占位符的颜色为灰色,由于QTextEdit 支持 html ,可以很方便的使用 setHtml 来实现。

private:intmaxLength;//最大输入长度QString placeholderText;void setPlaceholderText(QString text){placeholderText=text;if(toPlainText().isEmpty())//font-family:'微软雅黑'; color:#7f7f7f;">输入内容不超过200字setHtml(QString("<font color=\"#7f7f7f\">%1</font>").arg(placeholderText));}protected:void focusInEvent(QFocusEvent *e){if (!placeholderText.isNull()){QString t=toPlainText();if (t.isEmpty() || t==placeholderText) clear();}QTextEdit::focusInEvent(e);}void focusOutEvent(QFocusEvent *e){if (!placeholderText.isNull()){if (toPlainText().isEmpty())setHtml(QString("<font color=\"#7f7f7f\">%1</font>").arg(placeholderText));}

效果如下:




而限制输入最大长度,在子类中设置成员变量保存最大长度值,以及在父类中响应信号 textChanged()

//父类响应槽函数,将文本限制在设置的最大长度之内void parentWidget::solt_textEditChanged(){if (NULL != pTextEdit){QString textContent = pTextEdit->toPlainText();  int length = textContent.count();  int maxLength = pTextEdit->getMaxLength(); // 最大字符数if(length > maxLength) {  int position = pTextEdit->textCursor().position();  QTextCursor textCursor = pTextEdit->textCursor();  textContent.remove(position-(length-maxLength), length-maxLength);  pTextEdit->setText(textContent);  textCursor.setPosition(position-(length-maxLength));  pTextEdit->setTextCursor(textCursor);  }  }}//调用if (0 == pTextEdit){pTextEdit = new QMyTextEdit(this);}pTextEdit->setMaxLength(300);//要在connect 之前设置connect( pTextEdit ,SIGNAL( textChanged() ), this, SLOT( solt_textEditChanged() ) );

下载

类源码:0分下载



阅读全文
0 0