首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QT中信号和插槽的清晰命名

QT中信号和插槽的清晰命名
EN

Stack Overflow用户
提问于 2020-07-06 10:06:47
回答 2查看 1.9K关注 0票数 3

我很难在我的班上给出信号和插槽的清晰名字。

控制器控制设备的抽象级别:CommunicationAdapter

它确实:

  1. 将参数从控制器发送到设备(例如。用户在UI上输入值)从设备输入
  2. 请求参数(获取关于设备(设备上发生的事件)中参数变化的初始
  3. )

现在我有了这样的东西:

代码语言:javascript
运行
复制
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);
};

我觉得这个名字很难看,也不清楚

就连我都很难意识到周末后我在做什么

你知道我需要在每一行前面写些什么来解释函数的含义吗?

这里还有什么更清晰的名字?

编辑

现在我就这样解决了它:

代码语言:javascript
运行
复制
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);
};

欢迎任何反馈/意见。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-06 11:26:05

我会说,一个插槽应该总是以它的功能命名,而不是你如何触发它。信号也是如此,它们应该用过去式命名,说明发生了什么。这是Qt在其所有类中使用的通用方案,因此,为了保持一致性,同样的做法也是有意义的。

对于适配器类,最好使用与适配器将调用的函数相同的名称或类似的名称。但这是相当具体的,并取决于意见。

从逻辑的角度来看,Adapter不应该真正关心调用其功能的人,因为这可能会改变。用户更感兴趣的是说明调用函数的效果。

所以在你的情况下,我会把你的信号和插槽的名字翻过来。parameterReceived()应该是控制器发出的信号(读着:“可以”)。因此,一个示例命令链如下所示:

Controller::parameterRecieved() -> Adapter::sendParameter() -emits-> Adapter::parameterReceived() -> Device::sendParameter()

这样,您将保持事件->操作的通常模式。

票数 4
EN

Stack Overflow用户

发布于 2020-07-06 10:48:11

您可以定义您和您的同伴可以遵循的语法,以便更快、更一致地识别信号插槽。

像这样(jsut一个例子)

使用前缀"ON“”+ className +“动词在完美的插槽。

所以,如果你有一个点类,当它改变它的x,y值时,你想要一个插槽,那么这个插槽看起来就像

代码语言:javascript
运行
复制
"On_Point_Changed"

如果单击按钮:

代码语言:javascript
运行
复制
"On_MyButton_Clicked"

如果机器人被摧毁:

代码语言:javascript
运行
复制
"On_Robot_Destroyed"

"On_CommunicationAdapter_Replied"

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62753743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档