Форум русскоязычного сообщества Ubuntu


Автор Тема: связь двух классов через сигналы и слоты Qt  (Прочитано 4973 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн katejim

  • Автор темы
  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
скажите пожалуйста, а как именно связать два класса через сигналы и слоты на qt. или еще есть какой разумный вариант?
мне надо получить доступ к переменной из одного класса в другом)

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3144
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: связь двух классов через сигналы и слоты Qt
« Ответ #1 : 21 Апрель 2012, 22:47:37 »
Сделать публичную функцию которая будет возвращать значение этой переменной?
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн katejim

  • Автор темы
  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Re: связь двух классов через сигналы и слоты Qt
« Ответ #2 : 22 Апрель 2012, 10:01:43 »
я объявила публичную функцию в одном классе, но при вызове ее в другом, он ее не видит.
мб я что-то не так делаю?

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3144
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: связь двух классов через сигналы и слоты Qt
« Ответ #3 : 22 Апрель 2012, 14:42:12 »
Без кода не разобраться...
В том "другом" классе есть хедер содержащий нужную функцию?
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн Maestro79

  • Новичок
  • *
  • Сообщений: 10
  • UbuntuStudio 12.04
    • Просмотр профиля
Re: связь двух классов через сигналы и слоты Qt
« Ответ #4 : 23 Апрель 2012, 01:19:17 »
я объявила публичную функцию в одном классе, но при вызове ее в другом, он ее не видит.
мб я что-то не так делаю?
Во-первых, объявлять надо как сигнал:
signals:
    void мойСигнал(int параметр);
Эта функция по определению будет public. Это сигнал, наружу.

Во-вторых, соединять сигнал/слот нужно в том классе где эта пара создается.
Например: класс А, в нем В1 и В2, в В1 создан С1.
Соединить надо С1 и В2.
В классе В1 соединяем сигнал С1 и слот В1(через this).
И наконец  в классе А сигнал из В1(это сквозная передача) и слот В2
Сквозняк делается так:
signals:
    void мойСигнал(int параметр);
slot:
    void мойСлот (int параметр){emit мойСигнал(параметр);}


Удачи

Оффлайн ermak

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: связь двух классов через сигналы и слоты Qt
« Ответ #5 : 23 Апрель 2012, 14:03:02 »
Во-первых, объявлять надо как сигнал:
signals:
    void мойСигнал(int параметр);
Эта функция по определению будет public. Это сигнал, наружу.
Вы бы посмотрели во что раскрывается макрос signals и как вообще moc работает прежде чем писать про public функцию.

Оффлайн Maestro79

  • Новичок
  • *
  • Сообщений: 10
  • UbuntuStudio 12.04
    • Просмотр профиля
Re: связь двух классов через сигналы и слоты Qt
« Ответ #6 : 23 Апрель 2012, 15:39:37 »
Вы бы посмотрели во что раскрывается макрос signals ...
А зачем? На то он и макрос чтобы раз написать, отладить и забыть что там внутри.


Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3144
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: связь двух классов через сигналы и слоты Qt
« Ответ #7 : 23 Апрель 2012, 16:26:18 »
не вижу ничего плохого в signals:
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн S_F_H

  • Участник
  • *
  • Сообщений: 129
  • Да будет crossplatform!
    • Просмотр профиля
Re: связь двух классов через сигналы и слоты Qt
« Ответ #8 : 26 Апрель 2012, 00:00:09 »
а что собственно мешает связать сигналы и слоты между собой в функции main до создания экземпляров классов?
Я имею ввиду что-то вроде следующего:

int main() {
/*...*/
     Class *c1;
     Class *c2;

     connect (c1, SIGNAL(sig), c2, SLOT(c2));

/*....*/
}

Оффлайн Maestro79

  • Новичок
  • *
  • Сообщений: 10
  • UbuntuStudio 12.04
    • Просмотр профиля
Re: связь двух классов через сигналы и слоты Qt
« Ответ #9 : 26 Апрель 2012, 03:07:47 »
связать сигналы и слоты между собой в функции main до создания экземпляров классов?
Хм... Вы собираетесь соединить то чего еще не создали? с1 и с2  - без new это указатели "в никуда". Вы получите сообщение "Программа неожиданно завершилась."

Оффлайн Vovaldo

  • Любитель
  • *
  • Сообщений: 82
  • Ху Тин Пуй
    • Просмотр профиля
    • Путин забрал у Медведева инновационный орган
Re: связь двух классов через сигналы и слоты Qt
« Ответ #10 : 26 Апрель 2012, 11:19:35 »
скажите пожалуйста, а как именно связать два класса через сигналы и слоты на qt. или еще есть какой разумный вариант?
мне надо получить доступ к переменной из одного класса в другом)
По-моему, использовать для "доступа к переменной из одного класса в другом" сигналы и слоты на qt - это верх "гвоздеприбивания". Все необходимые средства имеются в языке С++ - всякие "дружественные классы и функции" - это, по идее, как раз то, что нужно.

 

Страница сгенерирована за 0.084 секунд. Запросов: 25.