Qt C++ лучше, чем множество сигнальных слотов

У меня есть вопрос, касающийся сигнальных слотов:

Допустим, у меня есть 2 класса CL_A, CL_B

class CL_A : public QObject
{
  Q_OBJECT
private:
  int a,b,c;                  // in reality I have more than 3 variables 
                              // that need to be set
public:
  void set_a ( int par_a);
  void set_b ( int par_b);    // in reality I have more than 3 setters
  void set_c ( int par_c);    // I also have getters and other methods     
  ...
};

CL_B * cl_b = new CL_B();

Из CL_B я хочу использовать установщики CL_A для установки переменных a,b,c класса CL_A. Чтобы сделать это, я установил соединения "сигнал-слот" для каждого установщика. Теперь мой вопрос:

Есть ли лучший способ сделать это вместо того, чтобы иметь много соединений сигнальных слотов (по одному для каждого метода)?

1 ответ

Я предполагаю, что эти классы на самом деле являются потомками QObject или вы вообще не можете использовать сигнальные слоты. "Лучший" способ зависит от того, что на самом деле хочется делать. Должен ли он быть потокобезопасным, а другой объект является глобальным или другим потоком? Должно ли это быть асинхронным? Если ответ "да", вам нужны сигналы или другой метод синхронизации, действительный для библиотек, которые вы используете.

QSignalMapper ( как работает QSignalMapper?) Может позволить создать некоторый универсальный отдельный обработчик для обработки нескольких событий, но как бы вы обобщили эти события, если ваши поля не являются каким-либо кортежем или массивом?

Вы можете использовать другие шаблоны C++. Если код не чувствителен ко времени, а предназначен для создания кода, который легко поддерживать, вы можете подумать о создании класса, который бы сопоставил имя поля с его адресом, чтобы вы могли сделать что-то вроде

cl_b["Speed"] = значение;

Рекомендую попробовать посмотреть в Стивене С. Дьюхерсте "C++ Gotchas"

Другие вопросы по тегам