Seite 1 von 1

dynamische erzeugen von QStates

Verfasst: 4. November 2010 20:17
von Qloroplast
Hallo,

ich habe vor eine Art Statemaschine zu machen und habe mich eingelesen, aber sehe nirgens wie ich dynamisch eine Anzahl von States definieren kann .


ich hab mir das vorgestellt

Code: Alles auswählen

 QStateMachine * automat = new QStateMachine;
int anzahl States; 

fülle die Statemaschine mit States und Operatoren
starte die maschine
ich habe Operatoren die zeitlich voneinander abhängen deswegen die States.

Die Liste von Operatoren soll in einen State geparkt werden
und dort gestartet werden.

Hat mir jemand ne Iddee oder Code Snippets. Das wichtige wäre mir erst mal wie ich
mir ne Funktion machen kann in der ich x states machen kann.

Verfasst: 4. November 2010 21:11
von padreigh
http://doc.qt.nokia.com/qt-maemo-4.7/st ... e-api.html

Ich glaube eher nicht das man im laufenden Betrieb States hinzufügen kann, das geht wohl nur über stop() / start() wobei sie sich resetted.

Verfasst: 6. November 2010 21:09
von Qloroplast
also ich will nicht im laufenden Betrieb X States hinzufügen.

Ich habe X-Operatoren bringe die in einen zeitlichen Ablauf mit Y States.

Dann wollte ich die Maschine mit Y-States bauen und pro State C Operatoren
abfahren und enden.

also ich habe am Anfang eine Funktion die mir aus einer Liste von Operatoren die Anzahl der States ausgibt und ich würde sie nun gerne in States verpacken :-)

Verfasst: 9. November 2010 14:25
von Qloroplast
so mal ein kurzes Update:

Code: Alles auswählen

QState * StartState = new QState();
        StartState->assignProperty(&button, "text", "1");
        StateListe.append(StartState);
        int Anzahl = 2000;
        for (int i = 1;i<Anzahl+1;i++)
        {                    
            StateListe.append(new QState());
            qDebug()<<"Fuege State hinzu";
            StateListe.at(i)->assignProperty(&button, "text", "Click me: "+QByteArray::number(i));
            StateListe.at(i)->setObjectName("State"+QByteArray::number(i));
            StateListe.at(i-1)->addTransition(&button, SIGNAL(clicked()),StateListe.at(i));
        }

        QLabel *label1 = new QLabel("state 1");
        QLabel *label2 = new QLabel("state 2");
        QLabel *label3 = new QLabel("state 3");
        QLabel *label4 = new QLabel("state 4");
        QState * state;
        foreach (state, StateListe)
        {
            machine.addState(state);
        }
        machine.setInitialState(StartState);
        machine.start();