Mic*_*ail 3 c++ qt signals-slots
我很难在我的一堂课上为信号和槽给出清晰的名称
它是Controller控制Device的一个抽象级别:CommunicationAdapter
它确实:
现在我有这样的东西:
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);
};
Run Code Online (Sandbox Code Playgroud)
我发现这个命名丑陋且不清楚
即使我也很难意识到周末后在做什么
你明白我需要在每一行前面添加注释来解释函数的含义吗?
这里还有什么更清晰的名字呢?
编辑:
目前我是这样解决的:
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);
};
Run Code Online (Sandbox Code Playgroud)
欢迎任何反馈/意见
我认为,插槽应该始终根据其功能来命名,而不是根据触发方式来命名。信号也是如此,它们应该以过去时命名,说明发生了什么。这是 Qt 在其所有类中使用的通用方案,因此为了保持一致性,这样做是有意义的。
对于适配器类,最好使用与适配器将调用的函数相同或相似的名称。但这是非常具体的并且需要听取意见。
从逻辑的角度来看,适配器不应该真正关心谁调用它的函数,因为这可能会改变。说明调用函数的效果对用户来说更有趣。
因此,就您而言,我几乎会翻转您的信号和插槽的名称。parameterReceived()应该(读:“可能”)是您的控制器发出的信号。因此,命令链示例如下所示:
Controller::parameterRecieved() -> Adapter::sendParameter() -emits-> Adapter::parameterReceived() -> Device::sendParameter()
这样您将保持事件 -> 操作的通常模式。