Witam!
Planuję napisać aplikacje, która na podstawie wybranych ustawień będzie tworzyła przebiegi drgań (i inne) wybranych materiałów.
Plan:
- Stworzenie klasy bazowej materiału
- Stworzenie klas danych materiałów dziedziczących po pkt 1
- Stworzenie klasy symulującej/zarządzającej materiałami
- GUI
Problem mam z połączeniem pól wejściowych z klasą.
Metoda 1.
Stworzenie dla każdego pola wejściowego(QSpinBox, QLineEdit itp) slotu oraz obsłużenie klasy zarządzającej.
Brzmi to trochę jak dużo niepotrzebnego kodu
void MainWindow::on_spinBox_valueChanged(int arg1)
{
manager->setFrictionGain(arg1);
}
Metoda 2
Stworzenie danej metody jako slotu i bezpośrednie połączenie:
connect(ui->spinBox, SIGNAL(valueChanged(int)), manager, SLOT(setFrictionGain(int)));
Niestety, argumenty funkcji muszą się zgadzać, jeżeli setFrictionGain będzie miał argument typu float, to i nawet z QDoubleSpinBox będzie problem bo ma argument typu double (taki przykład).
Więcej metod nie znam
Kolejnym problemem jest synchronizacja danych z GUI do klasy "manager", jeśli wpiszę początkowe wartości w GUI, to żeby klasa je otrzymała muszę pisać:
// metoda 1.
connect(ui->spinBox, SIGNAL(valueChanged(int)), manager, SLOT(setFrictionGain(int)));
manager->setFrictionGain(ui->spinBox->value());
Sprawa się komplikuje, jeśli tych pól będzie naprawde dużo (powyżej 50ciu).
Jak to najlepiej zrobić?
W Qt dłubię od niedawna (mam doświadczenie w C/C++ ukiernkowane w tworzeniu bibliotek do przetwarzania danych), szybko się uczę, ale potrzebuję kilka wskazówek jak takie aplikacje budować.
Przejrzałem dziś na szybko QtQuick'a, myślałem że interakcja pomiędzy gui a klasami będzie jakoś bardziej przemyślana, ale niestety nie widzę żadnych zalet.