首页 > 解决方案 > 如何进行程序执行检查

问题描述

按下按钮后,我必须执行以下代码:

void stageProgram::on_pushButton_programKeyGrip_clicked()
{
   ManageConfigFile configFile; //---> line 1
   configFile.keyGripTest(pLabel); //---> line 2 
   tetra_grip_api::set_sensor_data_rate(SENSOR_ADDRESS_BROADCAST, 0); //--->line 3

   disconnect(&api, &tetra_grip_api::tetraGripEvent,this, &stageProgram::stimStatusEventHandler); //---> line 4
   disconnect(&api, &tetra_grip_api::tetraGripSensorEvent,this, &stageProgram::sensorEventHandler); //--->line 5

   this->close(); //---> line 6
   keygripv2 = new ProgramKeyGripV2(pLabel);//---> line 7
   keygripv2 -> show();//---> line 8
}

我有一个基本的疑问:在执行第 6,7 8 行等之前,如何确保前五行已成功执行?

在这种情况下,最佳编程实践是什么?

标签: c++qt

解决方案


当一行“成功执行”时很难定义,因为为此您需要单元测试或至少一些布尔检查......例如,如果仅使用断言未满足某些条件,您可以使应用程序停止。 .. 像:

int divide(int a, int b)
{
    Q_ASSERT_X(b != 0, "divide", "division by zero");
    return a / b;
}

如果变量 b 为零,此断言将停止应用程序...

现在,一种更简单的方法是检查运行时何时执行代码指令(无论结果是否正常......)为此,您可以附加调试输出......在qt中有QDebug

disconnect(&api, &tetra_grip_api::tetraGripEvent,this, &stageProgram::stimStatusEventHandler); //---> line 4

qDebug() << "tetraGripEvent disconnected";  //<----- like this

disconnect(&api, &tetra_grip_api::tetraGripSensorEvent,this, &stageProgram::sensorEventHandler); //--->line 5

qDebug() << "tetraGripSensorEvent disconnected";  //<----- like this

this->close(); //---> line 6

现在在您的情况下很简单,因为 disconnect 实际上是一个返回布尔值的函数...

请参阅官方文档:其中说明

将对象发送者中的信号与对象接收者中的方法断开。如果连接成功断开,则返回true ;否则返回false

所以你可以做

auto flag{false};
flag = disconnect(&api, &tetra_grip_api::tetraGripEvent,this,    &stageProgram::stimStatusEventHandler); //---> line 4

qDebug() << "tetraGripEvent disconnected? " << flag;  //<----- like this

推荐阅读