Ahora se ve bastante más claro:
- La nueva clase herederá de QLineEdit, si queremos que utilice las mismas funciones que QLineEdit utilizaremos herencia pública, posteriormente si utilizas C++11 o superior, consideramos eliminar algunas de las funciones públicas que pueden modificar el comportamiento buscado.
- En la parte privada de la clase añadimos un QHBoxLayout* (para la parte visual) y un QLabel* (para mostrar el número multiplicado).
- Empezamos el constructor llamando al constructor de QLineEdit en la lista de inicialización pasado como argumento el Widget superior.
- Para permitir sólo números enteros utilizamos la función setValidator de QLineEdit con un QIntValidator en el constructor.
- En el constructor inicializamos el Label con el valor nulo y le damos el valor deseado
- Para conseguir el efecto visual deseado haremos los siguiente. El Layout lo inicializamos tomando como padre al widget actual (this) y al layout le añadimos el label con alineación a la derecha.
- Por último conectamos la señal de cambio del QLineEdit heredada con un slot que creamos para modificar el label.
- Añade todo lo demás que te haga falta.
Código C++:
Ver original// Considera si quieres herencia o agregación para el uso que le vayas a dar
class myLineEdit : public QLineEdit {
Q_OBJECT
public:
myLineEdit(QWidget* parent) : QLineEdit(parent) {
// Permitimos sólo números enteros
QLineEdit::setValidator(new QIntValidator(this));
// Creamos un QLabel para poner el número multiplicado
label = new QLabel("0.00",this);
// Usamos CSS para ponerlo en rojo
label->setStyleSheet("color: DarkRed");
// Creamos un Layout sobre el QLineEdit y añadimos el label en la derecha
myLay = new QHBoxLayout(this);
myLay->addWidget(label,0,Qt::AlignRight);
// Conectamos la señal de cambio en el QLineEdit con el slot que está a continuación
connect(this,SIGNAL(textChanged(QString)), this, SLOT(setLabel(QString)));
}
// Considera quitar el acceso público a algunas opciones si has determinado usar herencia
void setValidator(const QValidator *) = delete;
void setInputMask(const QString &inputMask) = delete;
private slots:
// El siguiente slot modifica el valor del labe
void setLabel(QString s) {
double numero = s.toInt() * propiedad;
label->setText(QString::number(numero));
}
private:
QLabel* label;
QHBoxLayout* myLay;
float propiedad = 5.02;
};