Закрыть ... [X]

Как связать 2 класса в одном

Пожалуйста, войдите или зарегистрируйтесь.

1 час 1 день 1 неделя 1 месяц Навсегда

Получить помощь и пообщаться с другими пользователями Ubuntu можно
на в сети Freenode
и в Jabber конференции

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

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

Оффлайн katejim

скажите пожалуйста, а как именно связать два класса через сигналы и слоты на qt. или еще есть какой разумный вариант?
мне надо получить доступ к переменной из одного класса в другом)

Оффлайн RazrFalcon

Сделать публичную функцию которая будет возвращать значение этой переменной?

Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики:

Оффлайн katejim

Оффлайн RazrFalcon

Без кода не разобраться...
В том "другом" классе есть хедер содержащий нужную функцию?

Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики:

Оффлайн Maestro79

Цитата: katejim от 22 Апрель 2012, 10:01:43

я объявила публичную функцию в одном классе, но при вызове ее в другом, он ее не видит.
мб я что-то не так делаю?

Во-первых, объявлять надо как сигнал:

Код: [Выделить]

signals:
    void мойСигнал(int параметр);
Эта функция по определению будет public. Это сигнал, наружу.

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

Код: [Выделить]

signals:
    void мойСигнал(int параметр);
slot:
    void мойСлот (int параметр){emit мойСигнал(параметр);}

Удачи

Оффлайн ermak

Цитата: Maestro79 от 23 Апрель 2012, 01:19:17

Во-первых, объявлять надо как сигнал:

Код: [Выделить]

signals:
    void мойСигнал(int параметр);
Эта функция по определению будет public. Это сигнал, наружу.
Вы бы посмотрели во что раскрывается макрос signals и как вообще moc работает прежде чем писать про public функцию.

Оффлайн Maestro79

Цитата: ermak от 23 Апрель 2012, 14:03:02

Вы бы посмотрели во что раскрывается макрос signals ...

А зачем? На то он и макрос чтобы раз написать, отладить и забыть что там внутри.

Оффлайн RazrFalcon

не вижу ничего плохого в signals:

Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики:

Оффлайн S_F_H

а что собственно мешает связать сигналы и слоты между собой в функции main до создания экземпляров классов?
Я имею ввиду что-то вроде следующего:

Код: [Выделить]

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

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

/..../
}

Оффлайн Maestro79

Цитата: S_F_H от 26 Апрель 2012, 00:00:09

связать сигналы и слоты между собой в функции main до создания экземпляров классов?

Хм... Вы собираетесь соединить то чего еще не создали? с1 и с2  - без new это указатели "в никуда". Вы получите сообщение "Программа неожиданно завершилась."

Оффлайн Vovaldo

Цитата: katejim от 21 Апрель 2012, 22:26:50

скажите пожалуйста, а как именно связать два класса через сигналы и слоты на qt. или еще есть какой разумный вариант?
мне надо получить доступ к переменной из одного класса в другом)

По-моему, использовать для "доступа к переменной из одного класса в другом" сигналы и слоты на qt - это верх "гвоздеприбивания". Все необходимые средства имеются в языке С++ - всякие "дружественные классы и функции" - это, по идее, как раз то, что нужно.

Страницы: [1]   Вверх

« предыдущая тема следующая тема »

 


XHTML Мобильная версия

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


Источник: http://forum.ubuntu.ru/index.php?topic=189018.0


Поделись с друзьями



Рекомендуем посмотреть ещё:



Как связать два класса - Java SE (J2SE) - Киберфорум Шаблоны мебели из бумаги своими руками


Как связать 2 класса в одном Как связать 2 класса в одном Как связать 2 класса в одном Как связать 2 класса в одном Как связать 2 класса в одном Как связать 2 класса в одном


ШОКИРУЮЩИЕ НОВОСТИ