Hier ist ein Beispiel für eine SpinBox, die ihre Änderungen in zugrunde liegenden Variablen schreibt. Das Hauptproblem, das ich habe, ist ValueChanged wird aufgerufen, wenn das Widget erstellt wird. Gibt es einen eleganteren Weg, dies zu tun? Ich finde es komisch, dass ich ein Widget mit sich selbst verbunden habe, aber valueChanged ist nicht virtuell.In Qt, wie implementiere ich ein Widget, das mit Variablen im Code konsistent bleibt
class ValueWriterInt: public QSpinBox {
Q_OBJECT
public:
ValueWriterInt(vector<int*> const& value): myValue(value) {
QObject::connect(this, SIGNAL(valueChanged(int)), this, SLOT(valueChanged(int)));
}
~ValueWriterInt() {}
private slots:
void valueChanged(int new_value) {
for (auto it = myValue.begin(); it != myValue.end(); ++it)
**it = new_value;
}
private:
vector<int*> myValue;
};
Danke. Dies ist, was ich getan habe, aber es ist äußerst beruhigend, unabhängige Bestätigung zu haben. valueChanged wird viel öfter aufgerufen, als ich dachte. Wenn Sie beispielsweise "setIndexWidget" aufrufen, wird valueChanged für das Widget aufgerufen. Der Bool hilft auch dort. Danke nochmal! –