Всем привет! Сделал класс-наследник от QLineEdit. А как обрабатывать изменение позиции курсора и отрисовывать его мигание например? И как быть с выделением? Я делаю сабклассинг так (пока только набросок):
//.h
class CPasswordEdit : public QLineEdit
{
Q_OBJECT
QString m_sPasswd;
bool m_bPasswdModeEnabled;
public:
CPasswordEdit(bool bEnablePasswdMode, QWidget *pParent = 0);
virtual ~CPasswordEdit();
private slots:
void paintEvent(QPaintEvent *pEvent);
void keyPressEvent(QKeyEvent *pEvent);
};
//.cpp
void CPasswordEdit::paintEvent(QPaintEvent *pEvent)
{
QPainter oPainter(this);
const int nW = this->rect().width();
const int nH = this->rect().height();
//рамка
QPen oPen(Qt::red);
oPen.setWidth(2);
//линейный градиент
QLinearGradient oLinearGradient(0, 0, 0, nH);
oLinearGradient.setSpread(QGradient::ReflectSpread);
oLinearGradient.setColorAt(0.0, Qt::white);
oLinearGradient.setColorAt(0.5, Qt::red);
oLinearGradient.setColorAt(1.0, Qt::red);
QBrush oBrush(oLinearGradient);
oPainter.setBrush(oBrush);
oPainter.setPen(oPen);
//рисуем виджет
QPainterPath oPainterPath;
oPainterPath.addRoundRect(1, 1, nW - 1, nH - 1, 100, 100);
oPainter.setClipPath(oPainterPath);
oPainter.drawPath(oPainterPath);
//выводим текст
if(!m_sPasswd.isNull())
{
//шрифт
QFont oFont;
oFont.setPointSize(15);
oPainter.setFont(oFont);
oPainter.setPen(Qt::white);
oPainter.setOpacity(1.0);
oPainter.drawText(0, 0, nW, nH, Qt::AlignCenter, m_sPasswd);
}
pEvent->accept();
}
//---------------------------------------------------------------------------------------------------------------------//
void CPasswordEdit::keyPressEvent(QKeyEvent *pEvent)
{
m_sPasswd += "X";
pEvent->accept();
this->repaint();
}
//---------------------------------------------------------------------------------------------------------------------//
//usage
PlayStationClientWidgets::CPasswordEdit *m_pLineEdit1 = new PlayStationClientWidgets::CPasswordEdit(false);
PlayStationClientWidgets::CPasswordEdit *m_pLineEdit2 = new PlayStationClientWidgets::CPasswordEdit(true);
.....
Или это получается как будто я делаю свой кастом контрол? Просто с таким подходом возникает ощущение что я не расширяю возможности QLineEdit а делаю все сам заново... Помогите плиз разобраться =)