Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.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_Qt5 - Fatal编程技术网

C++ 如果代码中没有任何插槽连接,是否有理由发出Qt信号?

C++ 如果代码中没有任何插槽连接,是否有理由发出Qt信号?,c++,qt,qt5,C++,Qt,Qt5,我是Qt的新手,从一个离开我们公司的开发人员那里接管了一个项目。我在他的代码中看到了几个发出信号的地方,但代码中没有与插槽的连接或信号的其他引用。有没有我不知道的理由这么做 我已经搜索了代码,试图找到任何引用正在发射的信号的东西,但是除了发出信号的代码之外,我找不到任何东西 //from the header file signals: void newInstance(); void SingleInstance::newConnection() { emit newInstanc

我是Qt的新手,从一个离开我们公司的开发人员那里接管了一个项目。我在他的代码中看到了几个发出信号的地方,但代码中没有与插槽的连接或信号的其他引用。有没有我不知道的理由这么做

我已经搜索了代码,试图找到任何引用正在发射的信号的东西,但是除了发出信号的代码之外,我找不到任何东西

//from the header file
signals:

    void newInstance();
void SingleInstance::newConnection()
{
emit newInstance();//这不会在项目中的任何其他位置引用

qDebug()这取决于意图。如果不使用,可以删除。

有人可能会问:为什么要停止应用程序?Qt提供了很多信号,但在任何地方都没有使用-应用程序既没有使用它们,也没有可能使用的Qt模块需要它们。是否要删除这些信号?为什么不

在典型的Qt应用程序中,大多数信号都没有连接。这是出于设计:信号的存在是为了表示“有趣”的情况,这可能对某人有用。是否有“某人”在那里使用它们(连接到它们)不是一个给定的条件。信号和插槽是解耦软件元素的手段:在设计API(例如类)时,您可能希望提供相关信号,以便以后使用

应用程序代码中碰巧没有连接的信号不应该立即被认为是多余的。想想为什么代码的作者会包含这些信号。他们可能对这些信号有需求,但现在已经过去了(查看添加代码前后的git历史记录,看看是否也添加了对这些信号的引用,但后来删除了这些引用)在这种情况下,你可以考虑删除信号。但是这是一个相当狭窄的情况,你应该首先了解信号的设计意图。假设一个有能力的团队,这些信号出于某种原因被放置在那里。了解可能的原因(或原因)。是更改代码的先决条件。任何代码都是如此,而不仅仅是信号定义

另外:确保组织中没有其他项目依赖于保存您正在使用的代码的存储库。例如,可能有人将其用作git子模块。他们可能正在使用这些信号。在开始删除功能之前,您需要确保

  • 信号表示一种可能值得处理或应对的情况。连接到信号是可选的

  • 信号以及API的其余部分都是一个契约。在不破坏功能的情况下,您无法更改契约

  • 如果您停止发出信号,依赖于该模块的项目的一部分可能会失败(或者只是按照预期停止工作,这可能会更糟糕,更难检测)。在这种情况下,您应该记录它,更改API版本

    如果不再发出信号,您也应该删除信号声明(或者以某种方式将其标记为已弃用),因此,至少编译会在依赖于模块的情况下失败(如果使用Qt 5语法,如果仍然使用
    信号
    宏,则更难检测,并且只能实时进行)


    显然,它不同于底层模块的API,不同于顶层项目中没有人依赖的类,也不同于您可以完全控制的类。

    这取决于开发人员的想法,也许他认为将来有必要通知是否创建了实例。我也认为这是一种可能性。有点“待办事项”的提醒进一步开发的代码部分。这不像是一个“待办”部分,更像是在建造新房子时安装电源插座。你无法事先知道谁将使用它们或用于什么目的,但如果有潜在的需要,最好提前考虑并将其包括在内。库巴有许多优点。这个特定项目已经改变在过去的5年里,这一点意义重大。据我所知,它最初是一个连接到本地服务器的客户端应用程序。整个产品的大部分已被重组为云平台。这可能是基于我所看到的,没有其他参考的信号可能已在不再适用的代码部分中使用遗憾的是,已经建立的存储库的历史并不长。当我考虑重构代码时,我会考虑删除那些显然没有使用的代码。谢谢。关于#1的观点很好,特别是与“可能值得处理”相关的。其中一些是以值得注意的方式处理正在改变状态的事件。我认为他可能有意回到这些代码的某些部分。
    void SingleInstance::newConnection()
    {
        emit newInstance(); // this is not referenced anywhere else in the project
    
       qDebug() << "New connection loading...";
       mSocket = mServer.nextPendingConnection();
       connect(mSocket,SIGNAL(readyRead()),this,SLOT(readyRead()));
    }