dynamische erzeugen von QStates

Alles rund um die Programmierung mit Qt
Antworten
Qloroplast
Beiträge: 16
Registriert: 23. März 2010 12:15

dynamische erzeugen von QStates

Beitrag 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.
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag 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.
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
Qloroplast
Beiträge: 16
Registriert: 23. März 2010 12:15

Beitrag 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 :-)
Qloroplast
Beiträge: 16
Registriert: 23. März 2010 12:15

Beitrag 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();
Antworten