me las arreglé para hacer lo que quiere mediante la derivación de una clase de QLineEdit
según siguiente ..
Constructor ..
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);
}
Anulación keyPressEvent
..
Cambio de posición
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);
}
cursor evento .. evento de cambio de
void QCustomLineEdit::onCursorPositionChanged(int /*oldPos*/, int newPos)
{
if(m_isPlaceHolderActive)
{
if(newPos != 0)
setCursorPosition(0);
}
}
texto ..
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);
}
}
}
he escrito muy de prisa que usted acaba de mostrar. Pruébelo usted mismo y siéntase libre de señalar cualquier error u optimización (es). Espero que esto ayude.
setPlaceholderText() método funciona bien. Pero cada vez que se enfoca el widget qlineedit o se hace clic en qlineedit, se oculta el texto predeterminado. Quiero mostrar el texto predeterminado incluso cuando el cursor está en el widget con la condición de que el cursor no se mueva hasta que el usuario escriba cualquier texto. –
Ok. Eliminar ui-> lineEdit-> setText (""); y ui-> lineEdit-> setEchoMode (QLineEdit :: Password); de on_lineEdit_selectionChanged().Y agregue ui-> lineEdit-> setEchoMode (QLineEdit :: Password); en on_lineEdit_textEdited() – ScarCode
@ user971306: He agregado un código en mi respuesta actualizada. – Ammar