Mat*_*mar 7 user-interface qt pyqt qlineedit
在QT中,创建lineEdit的使用该setText()方法显示文本.
但是光标可以移动默认文本.我希望光标不能为默认文本移动.
我的lineEdit类型已设置为密码.因此,默认文本("密码")也显示为"********".每当用户输入类型时,必须将类型更改为密码,当没有文本或用户没有输入任何文本时,lineEdit应显示纯文本"密码"
有什么想法解决上述两个问题?

Sca*_*ode 10
在构造函数中
ui->lineEdit->setPlaceholderText("password");
ui->lineEdit->setReadOnly(1);
Run Code Online (Sandbox Code Playgroud)
在on_lineEdit_selectionChanged()SLOT,放
ui->lineEdit->setText("");
ui->lineEdit->setEchoMode(QLineEdit::Password);
ui->lineEdit->setReadOnly(0);
Run Code Online (Sandbox Code Playgroud)
我注意到这个问题带有标签pyqt,因此我将为那些实际寻找python而不是c ++的人提供与该标签相关的实际答案。
self.searchEditText = QtGui.QLineEdit()
self.searchEditText.setPlaceholderText("Search for word")
Run Code Online (Sandbox Code Playgroud)
我设法通过QLineEdit按照以下方式派生出一个类来完成您想要的事情..
构造函数..
QCustomLineEdit::QCustomLineEdit(QWidget *parent) :
QLineEdit(parent)
{
connect(this, SIGNAL(textChanged(QString)), this, SLOT(onTextChanged(QString)));
connect(this, SIGNAL(cursorPositionChanged(int,int)), this, SLOT(onCursorPositionChanged(int,int)));
setEchoMode(QLineEdit::Password); // Echo mode in your case..
m_echoMode = echoMode(); // Member variable to store original echo mode..
m_placeHolderText = "Password"; // Member variable..
m_isPlaceHolderActive = true; // Member varible..
// Default case..
setPlaceholderText("");
setStyleSheet("QCustomLineEdit{color: gray;}");
setEchoMode(QLineEdit::Normal);
setText(__placeHolderText);
}
Run Code Online (Sandbox Code Playgroud)
覆盖keyPressEvent..
void QCustomLineEdit::keyPressEvent(QKeyEvent *e)
{
if(m_isPlaceHolderActive)
{
if(e->key() == Qt::Key_Delete || e->key() == Qt::Key_Backspace)
e->accept();
else
QLineEdit::keyPressEvent(e);
return;
}
QLineEdit::keyPressEvent(e);
}
Run Code Online (Sandbox Code Playgroud)
光标位置改变事件..
void QCustomLineEdit::onCursorPositionChanged(int /*oldPos*/, int newPos)
{
if(m_isPlaceHolderActive)
{
if(newPos != 0)
setCursorPosition(0);
}
}
Run Code Online (Sandbox Code Playgroud)
文本更改事件..
void QCustomLineEdit::onTextChanged(const QString &text)
{
if(m_isPlaceHolderActive)
{
if(text.compare(m_placeHolderText) != 0)
{
m_isPlaceHolderActive = false;
// Remove the 'placeHolderText' from 'text' itself..
QString temp = text;
temp = temp.mid(0, text.lastIndexOf(m_placeHolderText));
setStyleSheet("QCustomLineEdit{color: black;}");
setEchoMode(m_echoMode);
setText(temp);
}
else
{
setEchoMode(QLineEdit::Normal);
setText(m_placeHolderText);
setStyleSheet("QCustomLineEdit{color: gray;}");
setCursorPosition(0);
}
}
else
{
if(text.isEmpty())
{
m_isPlaceHolderActive = true;
setStyleSheet("QCustomLineEdit{color: gray;}");
setEchoMode(QLineEdit::Normal);
setText(m_placeHolderText);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我写得很匆忙,只是为了给你们看。自己测试一下,并随时指出任何错误或优化。希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
16206 次 |
| 最近记录: |