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

Yo lo haría así, seguramente haya más maneras de hacerlo.

Para asegurarte de que sea float puedes:
  • Utilizar un QLineEdit y utilizar un validator.
  • Utilizar un QDoubleSpinBox.

Para implementarlo podemos hacer lo siguiente:
  1. Crea una clase nueva a partir de QWidget
  2. Añade la Q_PROPERTY e implementa lo que necesites para ello.
  3. En la clase nueva añade un QLabel(que tendrá el texto que necesites) y la opción superior que hayas tomado.
  4. En la clase nueva crear un QHBoxLayout para asegurar que una cosa está a la derecha de otra insertando ambos widgets en el layout en orden.
  5. Conecta la señal de cambio de la opción superior con un slot privado que modifique el valor de la propiedad.
  6. Conecta la señal del Notify de la propiedad con un slot privado nuevo que crees en la clase.
  7. La implementación del slot consistirá en modificar el valor del QLabel en función del valor que recibas de la propiedad.

Con spinbox sería algo así:
Código C++:
Ver original
  1. class A : public QWidget {
  2.     Q_OBJECT
  3.     Q_PROPERTY(double number READ getNumber WRITE setNumber NOTIFY numberChanged)
  4. public:
  5.     A() {
  6.         lay = new QHBoxLayout(this);
  7.         spin = new QDoubleSpinBox(this);
  8.         spin->setMinimum(-100);
  9.         label = new QLabel(this);
  10.  
  11.         lay->addWidget(spin);
  12.         lay->addWidget(label);
  13.         connect(spin, SIGNAL(valueChanged(double)), this, SLOT(setNumber(double)));
  14.         connect(this, SIGNAL(numberChanged(double)), this, SLOT(setLabel(double)));
  15.     }
  16.  
  17.     double getNumber() {
  18.         return spin->text().toDouble();
  19.     }
  20.  
  21. private:
  22.     // UI
  23.     QLabel* label;
  24.     QDoubleSpinBox* spin;
  25.     QHBoxLayout* lay;
  26.  
  27.     // Properties
  28.     double m_number;
  29.  
  30. signals:
  31.     void numberChanged(double);
  32.  
  33. private slots:
  34.     void setNumber(double a) {
  35.         qDebug() << "Cambiando propiedad a " << a;
  36.         m_number = a;
  37.         emit numberChanged(a);
  38.     }
  39.  
  40.     void setLabel(double a) {
  41.         qDebug() << "Cambiando label";
  42.         if (a == 0)
  43.             label->setText("PRUEBA 1");
  44.         else if (a < 0)
  45.             label->setText("ASBDAD");
  46.         else
  47.             label->setText("CCCCCCCC");
  48.  
  49.     }
  50. };

Última edición por xKuZz; 01/08/2016 a las 10:51 Razón: Añadir código ejemplo