Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Qt中创建一个复杂的状态机_C++_Qt - Fatal编程技术网

C++ 在Qt中创建一个复杂的状态机

C++ 在Qt中创建一个复杂的状态机,c++,qt,C++,Qt,我有一个非常复杂的状态机,我需要使用Qt框架状态机来完成它。我知道如何使用Qt框架创建一个状态,但我不知道应该在每个状态中放置代码 我只知道addtransition,但是在开关盒中的代码放在哪里 switch (state) { case Z_START: state = Z_SAMPLE; emit stateChanged(Z_SAMPLE,0); case Z_SAMPLE: {

我有一个非常复杂的状态机,我需要使用Qt框架状态机来完成它。我知道如何使用Qt框架创建一个状态,但我不知道应该在每个状态中放置代码

我只知道
addtransition
,但是在开关盒中的代码放在哪里

switch (state) {
        case Z_START:

            state = Z_SAMPLE;
            emit stateChanged(Z_SAMPLE,0);

        case Z_SAMPLE:
        {

            DP_ANDY = false;    // moved to Z sample
            GSet.absP = Fp.pxf; //s08 //remember ambient pressure for correction // moved to Z sample

            ig.reset();

           //setSecondlineibited(true); // moved to state=Z_SAMPLE;
            int next = nextSample();
            /*
            for(;current_sample<FlashSampler;current_sample++)
            {
                currentMeasurement = SamplerTable.at(current_sample);
                if(currentMeasurement->enabled)
                    break;
            }
            */
            if(next>=FlashSampler)
            {
                htim=1;
                wtim=1;
                emit stateChanged(state = Z_FINI,resStat /*0*/);  // use state of last result instead of 0!
                break;
            }
            current_sample=next;
            currentMeasurement = SamplerTable.at(current_sample);

            precool = Ta >currentMeasurement->Ta;
#endif

            MethSet* ms = currentMeasurement->getMethod()->methset;
            Ta = currentMeasurement->Ta;//s117
            Te = currentMeasurement->Te;
            Ts = Ta - GSet.stdT;
            Ti = Ta; //wirkungslos hier
            St = ms->Step;
            Rt = ms->Rate / 200.0f;  // C/min alle 300 ms
            for(int i=0;i<6;i++)
                Ptim[i]=(int)(ms->airVol[i]*PUMPFACT);
#ifndef FlashSampler
            if(Fp.powvers<200)
                stirval = (ms->stir?255:0); //stirrer was at fixed speed for first 5 units with old powerboard
            else
#endif
                stirval=(int)((float)ms->stir/7.5f); //factor to be set
            if(stirval&&stirval<5)
                stirval=5;

state=Z_SAMPLE_wait,0);
        }
开关(状态){
案例Z_开始:
状态=Z_样本;
发射状态已更改(Z_样本,0);
案例Z_样本:
{
DP_ANDY=false;//移动到Z样本
GSet.absP=Fp.pxf;//s08//记住要校正的环境压力//移动到Z样本
ig.reset();
//setSecondlineibited(true);//移动到state=Z_SAMPLE;
int next=nextSample();
/*
对于(;当前样本已启用)
打破
}
*/
如果(下一步>=FlashSampler)
{
htim=1;
wtim=1;
emit stateChanged(state=Z_FINI,resStat/*0*/);//使用上一个结果的状态而不是0!
打破
}
当前样本=下一个;
currentMeasurement=SampleTable.at(当前样本);
预冷=Ta>电流测量->Ta;
#恩迪夫
MethSet*ms=currentMeasurement->getMethod()->MethSet;
Ta=currentMeasurement->Ta;//s117
Te=电流测量->Te;
Ts=Ta-GSet.stdT;
Ti=Ta;//wirkungslos hier
St=ms->Step;
Rt=ms->Rate/200.0f;//C/min所有300 ms
对于(int i=0;iairVol[i]*泵作用);
#ifndef闪蒸取样器
if(Fp.powversstir?255:0);//对于使用旧配电盘的前5台机组,搅拌器处于固定速度
其他的
#恩迪夫
stirval=(int)((float)ms->stir/7.5f);//要设置的因子

if(stirval&&stirvalw当使用
QStateMachine
时,不应该有任何switch语句。读取。是的,我知道,但是逻辑在哪里执行?在连接到
QState::entered()或
QState::exited()的插槽中
。您也可以使用无目标转换来实现输出,而无需更改当前状态。这些都在我链接的文档中。因此,我应该从qstate继承并编写我自己的entered并在其中写入逻辑,如果我想转换到另一个状态,我应该在entered函数中执行吗?