QT 中信号和槽的清晰命名
Clear naming for Signal and Slots in QT
我很难在我的 class
中为信号和插槽给出清晰的名称
是Controller控制Device的抽象层次:CommunicationAdapter
确实如此:
- 从控制器向设备发送参数(例如,用户在 UI 上输入值)
- 从设备请求参数(获取初始数据)
- 通知设备中的参数更改(设备上发生事件)
现在我有这样的东西:
class CommunicationAdapter
{
Q_OBJECT
public slots:
//1: slot for Controller to set parameter
void parameterReceived(Parameter parameter);
//2: slot for Controller to request parameter
void parameterRequested(Parameter parameter);
//2: slot for Device to reply on parameter request
void parameterReplied(Parameter parameter);
//3: slot for Device to inform about change of parameter
void parameterUpdated(Parameter parameter);
signals:
//1: signal to Device
void sendParameter(Parameter parameter);
//2: signal to Device for sending parameter request
void requestParameter(Parameter parameter);
//2: signal to Controller for reply on parameter request
void replyParameter(Parameter parameter);
//3: signal to Controller for inform about change of parameter
void updateParameter(Parameter parameter);
};
我觉得这个命名很难看而且不清楚
周末过后连我自己都不知道在做什么
你看到我需要在每行前面加上注释来解释功能的含义了吗?
这里还有什么名字更清楚?
编辑:
目前我是这样解决的:
class ICommunicationAdapter : public IThreadObject
{
Q_OBJECT
public slots:
void setParameter(Parameter parameter);
void getParameter(Parameter parameter);
void subscribeParameter(Parameter parameter);
signals:
void forwardParameter(Parameter parameter);
void requestParameter(Parameter parameter);
};
欢迎任何feedback/comments
您可以定义您和您的同事可以遵循的语法,以便更快、更一致地识别信号槽
像这样(举个例子)
为插槽使用前缀“ON”+ class名称+“完美动词”..
所以如果你有一个点 class 并且你想要一个槽,当它改变它的 x,y 值时
那么插槽看起来像
"On_Point_Changed"
如果单击按钮:
"On_MyButton_Clicked"
如果机器人被摧毁:
"On_Robot_Destroyed"
"On_CommunicationAdapter_Replied"
等等等等
我认为,插槽应始终以 它的作用 命名 - 而不是你触发它的方式。信号也是如此,它们应该用过去时命名,说明发生了什么。这是 Qt 在其所有 classes 中使用的通用方案,因此为了保持一致性,这样做是有意义的。
对于适配器 class,最好使用与适配器将调用的函数相同或相似的名称。但这是非常具体的,需要征求意见。
从逻辑的角度来看,适配器不应该真正关心谁调用它的函数,因为这可能会改变。说明调用该函数的效果对用户来说更有趣。
所以在你的情况下,我几乎会翻转你的信号和槽的名称。 parameterReceived()
应该(读作:“可能”)是您的控制器发出的信号。因此,命令链示例如下所示:
Controller::parameterRecieved() -> Adapter::sendParameter() -emits-> Adapter::parameterReceived() -> Device::sendParameter()
这样您将保持通常的事件模式 -> 动作。
我很难在我的 class
中为信号和插槽给出清晰的名称是Controller控制Device的抽象层次:CommunicationAdapter
确实如此:
- 从控制器向设备发送参数(例如,用户在 UI 上输入值)
- 从设备请求参数(获取初始数据)
- 通知设备中的参数更改(设备上发生事件)
现在我有这样的东西:
class CommunicationAdapter
{
Q_OBJECT
public slots:
//1: slot for Controller to set parameter
void parameterReceived(Parameter parameter);
//2: slot for Controller to request parameter
void parameterRequested(Parameter parameter);
//2: slot for Device to reply on parameter request
void parameterReplied(Parameter parameter);
//3: slot for Device to inform about change of parameter
void parameterUpdated(Parameter parameter);
signals:
//1: signal to Device
void sendParameter(Parameter parameter);
//2: signal to Device for sending parameter request
void requestParameter(Parameter parameter);
//2: signal to Controller for reply on parameter request
void replyParameter(Parameter parameter);
//3: signal to Controller for inform about change of parameter
void updateParameter(Parameter parameter);
};
我觉得这个命名很难看而且不清楚
周末过后连我自己都不知道在做什么
你看到我需要在每行前面加上注释来解释功能的含义了吗?
这里还有什么名字更清楚?
编辑:
目前我是这样解决的:
class ICommunicationAdapter : public IThreadObject
{
Q_OBJECT
public slots:
void setParameter(Parameter parameter);
void getParameter(Parameter parameter);
void subscribeParameter(Parameter parameter);
signals:
void forwardParameter(Parameter parameter);
void requestParameter(Parameter parameter);
};
欢迎任何feedback/comments
您可以定义您和您的同事可以遵循的语法,以便更快、更一致地识别信号槽
像这样(举个例子)
为插槽使用前缀“ON”+ class名称+“完美动词”..
所以如果你有一个点 class 并且你想要一个槽,当它改变它的 x,y 值时 那么插槽看起来像
"On_Point_Changed"
如果单击按钮:
"On_MyButton_Clicked"
如果机器人被摧毁:
"On_Robot_Destroyed"
"On_CommunicationAdapter_Replied"
等等等等
我认为,插槽应始终以 它的作用 命名 - 而不是你触发它的方式。信号也是如此,它们应该用过去时命名,说明发生了什么。这是 Qt 在其所有 classes 中使用的通用方案,因此为了保持一致性,这样做是有意义的。
对于适配器 class,最好使用与适配器将调用的函数相同或相似的名称。但这是非常具体的,需要征求意见。
从逻辑的角度来看,适配器不应该真正关心谁调用它的函数,因为这可能会改变。说明调用该函数的效果对用户来说更有趣。
所以在你的情况下,我几乎会翻转你的信号和槽的名称。 parameterReceived()
应该(读作:“可能”)是您的控制器发出的信号。因此,命令链示例如下所示:
Controller::parameterRecieved() -> Adapter::sendParameter() -emits-> Adapter::parameterReceived() -> Device::sendParameter()
这样您将保持通常的事件模式 -> 动作。