मैं .. निम्नलिखित के अनुसार 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);
}
अवहेलना 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);
}
कर्सर स्थिति परिवर्तन घटना ..
void QCustomLineEdit::onCursorPositionChanged(int /*oldPos*/, int newPos)
{
if(m_isPlaceHolderActive)
{
if(newPos != 0)
setCursorPosition(0);
}
}
पाठ परिवर्तन घटना ..
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);
}
}
}
मुझे यह बहुत जल्दी से केवल आपके दिखाने के लिए लिखा है। इसे स्वयं परीक्षण करें और किसी भी गलती या अनुकूलन को इंगित करने के लिए स्वतंत्र महसूस करें। उम्मीद है की यह मदद करेगा।
setPlaceholderText() विधि अच्छा काम करता है। लेकिन जब भी qlineedit विजेट फोकस हो जाता है या माउस qlineedit पर क्लिक किया जाता है, तो डिफ़ॉल्ट पाठ छिप जाता है। मैं डिफॉल्ट टेक्स्ट को तब भी प्रदर्शित करना चाहता हूं जब कर्सर विजेट में इस स्थिति के साथ है कि कर्सर को तब तक नहीं ले जाना चाहिए जब तक कोई उपयोगकर्ता टाइप न हो। –
ठीक है। Ui-> lineEdit-> setText ("") हटाएं; और ui-> lineEdit-> setEchoMode (QLineEdit :: पासवर्ड); on_lineEdit_selectionChanged() से।और ui-> lineEdit-> setEchoMode (QLineEdit :: पासवर्ड) जोड़ें; on_lineEdit_textEdited() – ScarCode
@ user971306: मैंने अपने अपडेट किए गए उत्तर में कुछ कोड जोड़ा है। – Ammar