Есть ли причина испускать сигнал Qt, если в коде нет ни одного слота? - PullRequest
3 голосов
/ 08 октября 2019

Я новичок в Qt и перенял проект у разработчика, который покинул нашу компанию. В его коде я вижу несколько мест, где испускается сигнал, но в коде нет связи со слотом или другой ссылкой на сигнал. Есть ли причина для этого, о которой я не знаю?

Я искал код, пытаясь найти что-либо, что ссылалось бы на излучаемые сигналы, но я не могу найти ничего, кроме кода, который излучает.

//from the header file
signals:

    void newInstance();
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()));
}

Нет ошибок, и приложение работает нормально. Я просто пытаюсь понять, что я пропускаю что-то из-за отсутствия опыта работы с Qt.

Ответы [ 3 ]

3 голосов
/ 08 октября 2019

Можно спросить: зачем останавливаться на вашем приложении? Qt предоставляет множество сигналов, которые также нигде не используются - ни ваше приложение не использует их, ни модули Qt, которые вы, вероятно, используете, не нуждаются в них. Вы хотели бы удалить эти сигналы? Почему нет?

В типичных приложениях Qt большинство сигналов не связаны. Это по замыслу: сигналы служат для обозначения «интересных» ситуаций, которые могут быть кому-то полезны. Есть ли "кто-то", чтобы использовать их (соединиться с ними), не является определенным. Сигналы и слоты представляют собой средства разъединения программных элементов : при разработке API (например, класса) вы, возможно, захотите предоставить соответствующие сигналы, которые могут пригодиться позже.

Сигналы в вашем приложениикод, который не связан, не должен сразу же рассматриваться как избыточный. Подумайте, зачем автору этого кода включать эти сигналы. Они могли нуждаться в них, которые уже прошли (посмотрите историю git во время добавления кода и посмотрите, были ли какие-либо ссылки на эти сигналы также добавлены, но позже удалены) - в этом случае вы могли бы рассмотретьудалить сигналы. Но это довольно узкий случай, и вы должны сначала понять замысел проекта, который представляют сигналы. Предполагая компетентную команду, эти сигналы были помещены туда по некоторым причинам. Понимание этой вероятной причины (или причин) является предпосылкой для изменения кода. Это относится к любому коду, а не только к определениям сигналов.

Кроме того: убедитесь, что никакие другие проекты в вашей организации не зависят от репозитория, в котором хранится код, который вы используете. Кто-то может использовать его как подмодуль git, например. И они могут использовать эти сигналы. Вы должны убедиться перед тем, как приступить к удалению функциональности.

0 голосов
/ 08 октября 2019
  1. Сигналы отражают ситуацию, на которую, возможно, стоит обратить внимание или среагироватьК ним необязательно подключаться.

  2. Сигналы, как и остальная часть API, являются контрактом. Вы не можете изменить контракт, не нарушая функциональность.

Если вы прекратите излучать сигнал, часть проекта, зависящая от такого модуля, может выйти из строя (или просто перестать работать как задумано, что может быть хужеи сложнее обнаружить). В этом случае вам следует задокументировать это, изменить версию API ...

Если больше не генерируется, вы должны также удалить объявление сигнала (или пометить его как-то устаревшее), так что, по крайней мере, компиляция не удастсяв различных модулях (если используется синтаксис Qt 5, если все еще используется макрос SIGNAL, его будет сложнее обнаружить, и только в режиме реального времени).

Очевидно, что это не тот же APIмодуль базового уровня, чем класс в проекте верхнего уровня, от которого никто не зависит и где у вас есть полный контроль.

0 голосов
/ 08 октября 2019

Это зависит от намерения. Если вы не используете, вы можете удалить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...