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:
- Crea una clase nueva a partir de QWidget
- Añade la Q_PROPERTY e implementa lo que necesites para ello.
- En la clase nueva añade un QLabel(que tendrá el texto que necesites) y la opción superior que hayas tomado.
- 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.
- Conecta la señal de cambio de la opción superior con un slot privado que modifique el valor de la propiedad.
- Conecta la señal del Notify de la propiedad con un slot privado nuevo que crees en la clase.
- 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 originalclass A : public QWidget {
Q_OBJECT
Q_PROPERTY(double number READ getNumber WRITE setNumber NOTIFY numberChanged)
public:
A() {
lay = new QHBoxLayout(this);
spin = new QDoubleSpinBox(this);
spin->setMinimum(-100);
label = new QLabel(this);
lay->addWidget(spin);
lay->addWidget(label);
connect(spin, SIGNAL(valueChanged(double)), this, SLOT(setNumber(double)));
connect(this, SIGNAL(numberChanged(double)), this, SLOT(setLabel(double)));
}
double getNumber() {
return spin->text().toDouble();
}
private:
// UI
QLabel* label;
QDoubleSpinBox* spin;
QHBoxLayout* lay;
// Properties
double m_number;
signals:
void numberChanged(double);
private slots:
void setNumber(double a) {
qDebug() << "Cambiando propiedad a " << a;
m_number = a;
emit numberChanged(a);
}
void setLabel(double a) {
qDebug() << "Cambiando label";
if (a == 0)
label->setText("PRUEBA 1");
else if (a < 0)
label->setText("ASBDAD");
else
label->setText("CCCCCCCC");
}
};