Может ли кто-нибудь дать мне то же самое, что нужно помнить при использовании сигналов и слотов в Qt? - PullRequest
2 голосов
/ 04 октября 2010

Я учусь программировать с использованием фреймворка Qt. Когда я пишу код, в него включены сигналы и слоты, кажется, что события не срабатывают, а сигналы и слоты не работают. Это действительно меня раздражает. Можете ли вы дать мне некоторые предостережения и предупреждения о сигналах и слотах в Qt?

объявления слотов:

private slots:
            void onFtpCmdFinish(int cmdId, bool error);
            void onRealtimeFtpCmdsDone(bool error);

код подключения:

   ftpHandle = new QFtp( this );
   connect(ftpHandle, SIGNAL(commandFinished(int, bool)), this, SLOT(onFtpCmdFinish(int, bool)));

   connect(ftpHandle, SIGNAL(done(bool)), this, SLOT(onRealtimeFtpCmdsDone(bool)));

Заранее спасибо!

Ответы [ 4 ]

3 голосов
/ 04 октября 2010

Вы можете обнаружить сбой подключения () только во время выполнения.

Пара советов:

определение QT-FATAL-WARNINGS = 1 заставит Qt утверждать и завершать работу всякий раз, когда он получает соединение, которое не соответствует.

Или упаковка каждого соединения в:
bool ok = connect (……); QASSERT (хорошо);

3 голосов
/ 04 октября 2010

В будущем, если вы когда-нибудь снова столкнетесь с проблемами с вашими сигналами и слотами Qt, содержание следующей записи блога может оказаться реальным спасением жизни (или, по крайней мере, очень хорошей отправной точкой дляваши исследования):

http://samdutton.wordpress.com/2008/10/03/debugging-signals-and-slots-in-qt/

В нем тщательно перечислены 20 способов отладки / устранения неисправностей ваших сигналов и слотов;следуйте этому списку и велики шансы, что вы в конце концов поймете, что не так.

Надеюсь, это поможет.

2 голосов
/ 05 октября 2010

Всегда проверяйте тип возвращаемого значения, если оно истинно, тогда СОЕДИНЕНИЕ успешно, иначе что-то не так ..

1 голос
/ 11 октября 2010

Не забудьте о пятом аргументе Qt :: ConnectionType, если вы будете писать многопоточные приложения

...