crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Связка сигнал-слот из примера не работает
wf778899
  опции профиля:
сообщение 20.7.2014, 13:38
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 13
Регистрация: 20.7.2014
Пользователь №: 4191

Спасибо сказали: 0 раз(а)




Репутация:   0  


Дорвался, наконец-то, до QT-Assistance, решил там посмотреть примеры с использованием сигналов и слотов. Попробовал скомпилировать код ниже (точь в точь из примера) - там простая связка двух объектов, изменение переменной одного объекта шлёт сигнал об изменении в слот второму объекту, в результате чего он пишет в свою переменную значение, переданное с сигналом. Проще некуда и должно работать - только херушки. Пол-дня долбаюсь. Работаю в Qt 5.3.1, при компиляции вылазят ошибки на строчках, лично мною подкрашенных (см. ниже). Текст ошибок по каждой строчке ниже. Кто-нибудь знает, в чём тут проблема. У меня такое чувство, что что-то с настройками проекта - пример же не кем-нибудь набран...

1 #include <QApplication>
2 #include <QObject>
3 class Counter : public QObject{
4 Q_OBJECT
5 public:
6 Counter() { m_value = 0; }
7 int value() const { return m_value; }
8 public slots:
9 void setValue(int value);
10 signals:
11 void valueChanged(int newValue);
12 private:
13 int m_value;
14 };
15
16 void Counter::setValue(int value) {
17 if (value != m_value) {
18 m_value = value;
19 emit valueChanged(value);
20 }
21 }
22
23 int main(int argc, char *argv[]) {
24 QApplication app(argc, argv);
25 Counter a, b;
26 QObject::connect(&a, &Counter::valueChanged, &b, &Counter::setValue);
27 a.setValue(12); // a.value() == 12, b.value() == 12
28 b.setValue(48); // a.value() == 12, b.value() == 48
29 return app.exec();
30 }


Line 19 D:\Projects\QT\qqq\main.cpp:19: ошибка: undefined reference to `Counter::valueChanged(int)'
Line 27 D:\Projects\QT\qqq\main.cpp:27: ошибка: undefined reference to `Counter::valueChanged(int)'
Line 06 D:\Projects\QT\qqq\main.cpp:6: ошибка: undefined reference to `vtable for Counter'
Line 241 C:\Qt\5.3\mingw482_32\include\QtCore\qobject.h:241: ошибка: undefined reference to `Counter::staticMetaObject'
Line 03 D:\Projects\QT\qqq\main.cpp:3: ошибка: undefined reference to `vtable for Counter'
collect2.exe:-1: ошибка: error: ld returned 1 exit status
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 20.7.2014, 14:59
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


скорее всего, используешь сразу стандартный компилятор, до обработки через moc, который обрабатывает спецсимволы Qt.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wf778899
  опции профиля:
сообщение 20.7.2014, 15:09
Сообщение #3


Студент
*

Группа: Новичок
Сообщений: 13
Регистрация: 20.7.2014
Пользователь №: 4191

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Iron Bug @ 20.7.2014, 12:59) *
скорее всего, используешь сразу стандартный компилятор, до обработки через moc, который обрабатывает спецсимволы Qt.

Всё, разобрался. Класс Counter надо было в хедере объявить, MOC по-другому не понимает...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 21.7.2014, 23:06
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(wf778899 @ 20.7.2014, 18:09) *
MOC по-другому не понимает..
MOC тут не причём! Он своё дело сделает - h-файл сгенерит. вот только его ты не подключил явно.
его можно после объявления класса подключть.

Когда же ты разделяешь на два файла (h/cpp), то qmake генерит makefile с соответствующим кодом (так сказать за тебя)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.4.2024, 4:03