crossplatform.ru

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

> Какая то непонятка со слотами в наследованных класах
MishaUA
  опции профиля:
сообщение 18.6.2013, 17:04
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 185
Регистрация: 28.4.2013
Пользователь №: 3810

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




Репутация:   0  


Сам я в основном пишу Под микроконтроллеры на Си и в С++ не являюсь проффи. Сейчас столкнулся с проблемами при наследовании классов.
Вобщем, есть такой кусочек кода:

class cl1 : QObject {
    Q_OBJECT
public:
    int dgd;
};

class cl2 : public cl1 {
public:
    int dgd;
private slots:
    void sll();
};

в *.cpp:
void cl2::sll()
{
}

При компиляции ошибка mingw32-make[1]: *** [debug/classs.cpp] Error 1.
Если убрать функцию sll(), то ошибки нет.
Что я сделал не так?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Steklova Olga
  опции профиля:
сообщение 18.6.2013, 17:46
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

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




Репутация:   4  


Цитата(MishaUA @ 18.6.2013, 17:04) *
Если убрать функцию sll(), то ошибки нет.
Что я сделал не так?

Сначала определись: sll() у тебя должен быть слотом или методом класса (как ты говоришь, функцией)?
Сейчас у тебя в коде указано, что sll() - это не просто функция, а слот.
А чтобы класс работал с сигналами и слотами, он должен быть потомком QObject.

Поэтому, если sll() действительно должен быть слотом, то в классе cl2 надо указать слово Q_OBJECT:
class cl2 : public cl1 {
  Q_OBJECT //<------------------тут
public:    
  int dgd;
private slots:    
  void sll();
};

Если же sll() должен быть private-методом класса, то его надо описать в разделе private:
class cl2 : public cl1 {
public:    
  int dgd;
private: //<------------------тут    
  void sll();
};

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MishaUA
  опции профиля:
сообщение 18.6.2013, 20:14
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 185
Регистрация: 28.4.2013
Пользователь №: 3810

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




Репутация:   0  


Цитата(Steklova Olga @ 18.6.2013, 17:46) *
Сначала определись: sll() у тебя должен быть слотом или методом класса (как ты говоришь, функцией)?
Сейчас у тебя в коде указано, что sll() - это не просто функция, а слот.
А чтобы класс работал с сигналами и слотами, он должен быть потомком QObject.

Поэтому, если sll() действительно должен быть слотом, то в классе cl2 надо указать слово Q_OBJECT:
class cl2 : public cl1 {
  Q_OBJECT //<------------------тут
public:    
  int dgd;
private slots:    
  void sll();
};

sll() - это слот (сорри, что затупил).
Добавлять Q_OBJECT тоже пробовал, но тогда вылазит ошибка error: within this context (прям на Q_OBJECT) и 'class QObject QObject::QObject' is inaccessible

PS: пишу в Qt5
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- MishaUA   Какая то непонятка со слотами в наследованных класах   18.6.2013, 17:04
- - ilyabvt   Может потому что макрос Q_OBJECT отсутствует в объ...   18.6.2013, 17:38
- - Steklova Olga   Цитата(MishaUA @ 18.6.2013, 17:04) Если у...   18.6.2013, 17:46
|- - MishaUA   Цитата(Steklova Olga @ 18.6.2013, 17:46) ...   18.6.2013, 20:14
- - Litkevich Yuriy   Цитата(MishaUA @ 18.6.2013, 19:04) При ко...   18.6.2013, 18:21
- - MishaUA   Капец, такие же ошибки даже в этом куске кода: cla...   18.6.2013, 21:34
- - Litkevich Yuriy   попробуй просто полностью пересобрать проект make ...   18.6.2013, 22:02
- - MishaUA   А я это и делаю при сборке)) В Creater жму "п...   18.6.2013, 22:16
- - Litkevich Yuriy   Цитата(MishaUA @ 19.6.2013, 0:16) А я это...   18.6.2013, 22:19
- - MishaUA   Чего то я в настройках этого пункта не нашел))). Я...   18.6.2013, 22:35
- - Litkevich Yuriy   приведи весь вывод сборки Цитата(MishaUA @ 1...   18.6.2013, 22:44
- - MishaUA   Пока что сделал так: class cl1 : public QObjec...   18.6.2013, 23:00
- - Litkevich Yuriy   Цитата(MishaUA @ 19.6.2013, 1:00) Компили...   19.6.2013, 3:20
- - MishaUA   заработало после добавления public в class cl1 ...   19.6.2013, 10:50
- - Steklova Olga   MishaUA, работая с проектом в Qt Creator, можно до...   19.6.2013, 11:14
- - MishaUA   у меня просто часто в одном файле несколько классо...   19.6.2013, 11:54
- - Steklova Olga   Для нового класса создаются новые файлы, очень удо...   19.6.2013, 12:03
- - Litkevich Yuriy   Цитата(MishaUA @ 19.6.2013, 12:50) зарабо...   19.6.2013, 18:30


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


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




RSS Текстовая версия Сейчас: 1.12.2024, 22:50