Подключиться без объекта - PullRequest
2 голосов
/ 24 ноября 2010

Я хочу подключить некоторую функцию как слот без класса, могу ли я сделать это:

void update() { }

int main()
{
  QTimer timer = ...;
  QObject::connect(timer, SIGNAL(timeout()), SLOT(update()));
  return 0;
}

Компилятор говорит, что без объекта это невозможно.

Ответы [ 3 ]

2 голосов
/ 24 ноября 2010

AFAIK, вы можете подключать сигналы только к слотам, а слоты могут существовать только как функции-члены Q_OBJECT.

В то время как многие люди фокусируются на разнице между шаблоном и moc между сигналами Qt и boost :: сигналовили сигналы GTKmm, это разница, о которой я, в конечном счете, беспокоюсь больше.Сигналы Qt не так выразительны и вызывают больше зависимостей, чем я хочу.

Я все еще использую Qt, но это только потому, что доступность GTKmm полностью отсутствует в системах win32.

Что вы можете сделать, изКонечно, это сделать подкласс QTimer, который подключается к собственному сигналу тайм-аута со слотом, который генерирует сигнал boost ::, который вы МОЖЕТЕ подключить к своей внешней функции.Но позаботьтесь о проблемах использования сигналов повышения в Qt, я просто использую сигналы2, чтобы полностью избежать этого, и я получаю безопасность потоков.

1 голос
/ 27 февраля 2012

Вы можете использовать механизм слота сигнала Boost. Слот повышения сигнала

И если вы используете Qt 4.1 или выше, оба могут использоваться вместе, как описано здесь Повышение сигналов и слотов с помощью Qt

1 голос
/ 24 ноября 2010

Вам нужно, чтобы Qt распознал слот.Для этого вам нужно пройти класс.Так что я бы сказал, невозможно.

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