Ver Mensaje Individual
  #8 (permalink)  
Antiguo 01/08/2016, 16:14
Avatar de xKuZz
xKuZz
 
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 2 meses
Puntos: 27
Respuesta: Qt: Personalizar QLineEdit

Ahora se ve bastante más claro:
  1. 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.
  2. En la parte privada de la clase añadimos un QHBoxLayout* (para la parte visual) y un QLabel* (para mostrar el número multiplicado).
  3. Empezamos el constructor llamando al constructor de QLineEdit en la lista de inicialización pasado como argumento el Widget superior.
  4. Para permitir sólo números enteros utilizamos la función setValidator de QLineEdit con un QIntValidator en el constructor.
  5. En el constructor inicializamos el Label con el valor nulo y le damos el valor deseado
  6. 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.
  7. Por último conectamos la señal de cambio del QLineEdit heredada con un slot que creamos para modificar el label.
  8. Añade todo lo demás que te haga falta.

Código C++:
Ver original
  1. // Considera si quieres herencia o agregación para el uso que le vayas a dar
  2. class myLineEdit : public QLineEdit {
  3.     Q_OBJECT
  4. public:
  5.     myLineEdit(QWidget* parent) : QLineEdit(parent) {
  6.         // Permitimos sólo números enteros
  7.         QLineEdit::setValidator(new QIntValidator(this));
  8.         // Creamos un QLabel para poner el número multiplicado
  9.         label = new QLabel("0.00",this);
  10.         // Usamos CSS para ponerlo en rojo
  11.         label->setStyleSheet("color: DarkRed");
  12.  
  13.         // Creamos un Layout sobre el QLineEdit y añadimos el label en la derecha
  14.         myLay = new QHBoxLayout(this);
  15.         myLay->addWidget(label,0,Qt::AlignRight);
  16.  
  17.         // Conectamos la señal de cambio en el QLineEdit con el slot que está a continuación
  18.         connect(this,SIGNAL(textChanged(QString)), this, SLOT(setLabel(QString)));
  19.     }
  20.     // Considera quitar el acceso público a algunas opciones si has determinado usar herencia
  21.     void setValidator(const QValidator *) = delete;
  22.     void setInputMask(const QString &inputMask) = delete;
  23.  
  24. private slots:
  25.     // El siguiente slot modifica el valor del labe
  26.     void setLabel(QString s) {
  27.         double numero = s.toInt() * propiedad;
  28.         label->setText(QString::number(numero));
  29.     }
  30.  
  31. private:
  32.     QLabel* label;
  33.     QHBoxLayout* myLay;
  34.     float propiedad = 5.02;
  35. };