Russian Qt Forum
Февраль 23, 2012, 03:09
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
(Модератор:
Sergeich
) >
[Решено] Проблема connect разных классов.
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: [Решено] Проблема connect разных классов. (Прочитано 287 раз)
Glaciuse
Новичок
Offline
Сообщений: 6
[Решено] Проблема connect разных классов.
«
:
Январь 25, 2012, 13:52 »
Есть такой код:
#include "SomeClass1.h"
#include "SomeClass2.h"
#include <QtGui/QApplication>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
SomeClass1 obj1;
SomeClass2 obj2;
obj1.show();
obj2.show();
return app.exec();
}
В классе SomeClass1 есть сигнал с названием smthEvent, а в классе SomeClass2 есть слот smthToDo.
Нужно связать сигнал smthEvent класса SomeClass1 со слотом smthToDo класса SomeClass2.
Класс SomeClass1 наследуется от QWidget, класс SomeClass2 от QLabel.
Если добавить в main() после инициализации объектов obj1 и obj2 строку:
QObject::connect( obj1 , SIGNAL(smthEvent()) , obj2 , SLOT(smthToDo()) );
, то компилятор ругается на то, что для connect нет конструктора данного типа.
Как правильно связать сигнал smthEvent со слотом smthToDo?
«
Последнее редактирование: Январь 26, 2012, 00:03 от Glaciuse
»
Записан
mutineer
Крякер
Offline
Сообщений: 347
Re: Проблема connect разных классов.
«
Ответ #1 :
Январь 25, 2012, 13:56 »
В connect надо указатели на объекты передавать, а не сами объекты. В документации написано...
И причем тут GUI ?
Записан
Переломать всем ноги и пусть никто не уйдет обиженным
danquimby
Чайник
Offline
Сообщений: 76
НасРать :)
Re: Проблема connect разных классов.
«
Ответ #2 :
Январь 25, 2012, 17:09 »
навая не проверял
это для наглядности . все они от QObject
все равно все приходят к нему, так что пример все равно актуален.
Код:
class SomeClass1 : public QObject
{
Q_OBJECT
public:
void emiting()
{
emit smthEvent();
}
signals:
void smthEvent();
};
class SomeClass2 : public QObject
{
Q_OBJECT
public:
public slots:
void smthToDo();
};
// реализация обратная от template нельзя реализовывать в теле класса
void SomeClass2::smthToDo()
{
qDebug("SomeClass2::smthToDo()");
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// нужно делать динамическими , а не статическими
SomeClass1* obj1 = new SomeClass1;
SomeClass2* obj2 = new SomeClass2;
// саязываем
connect(obj1,SIGNAL(smthEvent()),obj2,SLOT(smthToDo()));
obj1->emiting();
return app.exec();
}
надеюсь я тебе помог хотя бы не много понять сигналы\слоты ... кстати могу быть и сигнал\сигнал :)
Записан
главное не то что ты не чего не знаешь, а то что ты хочешь это узнать.
danquimby
Чайник
Offline
Сообщений: 76
НасРать :)
Re: Проблема connect разных классов.
«
Ответ #3 :
Январь 25, 2012, 17:11 »
и еще , тема не верная , конект соединяет
ОДИНАКОВЫЕ классы.
1. наследники от QObject или его производных
2. они должны иметь макрос Q_OBJECT
эти 2 параметра и все будет тип топ
Записан
главное не то что ты не чего не знаешь, а то что ты хочешь это узнать.
twp
Крякер
Offline
Сообщений: 363
Re: Проблема connect разных классов.
«
Ответ #4 :
Январь 25, 2012, 17:12 »
Код
C++ (Qt)
QObject
::
connect
(
&
obj1
,
SIGNAL
(
smthEvent
(
)
)
,
&
obj2
,
SLOT
(
smthToDo
(
)
)
)
;
Записан
danquimby
Чайник
Offline
Сообщений: 76
НасРать :)
Re: Проблема connect разных классов.
«
Ответ #5 :
Январь 25, 2012, 18:04 »
Цитата: twp от Январь 25, 2012, 17:12
Код
C++ (Qt)
QObject
::
connect
(
&
obj1
,
SIGNAL
(
smthEvent
(
)
)
,
&
obj2
,
SLOT
(
smthToDo
(
)
)
)
;
ну да если связывать ты будешь в классе или как в данном случае
когда QObgect не является производным
То нужно указывать QObject::
Записан
главное не то что ты не чего не знаешь, а то что ты хочешь это узнать.
mutineer
Крякер
Offline
Сообщений: 347
Re: Проблема connect разных классов.
«
Ответ #6 :
Январь 25, 2012, 18:21 »
2 danquimby: ты только что убил мой неокрепший мозг
Записан
Переломать всем ноги и пусть никто не уйдет обиженным
danquimby
Чайник
Offline
Сообщений: 76
НасРать :)
Re: Проблема connect разных классов.
«
Ответ #7 :
Январь 25, 2012, 18:25 »
Цитата: mutineer от Январь 25, 2012, 18:21
2 danquimby: ты только что убил мой неокрепший мозг
отвратительно, первый труп на мои крепкие плечи
Записан
главное не то что ты не чего не знаешь, а то что ты хочешь это узнать.
twp
Крякер
Offline
Сообщений: 363
Re: Проблема connect разных классов.
«
Ответ #8 :
Январь 25, 2012, 19:26 »
я как бы показал что в connect нужно передавать указатели на объект, а не сами объекты
По идее это и была ошибка ТС:
Цитировать
Если добавить в main() после инициализации объектов obj1 и obj2 строку:
QObject::connect(
obj1
, SIGNAL(smthEvent()) ,
obj2
, SLOT(smthToDo()) );
, то компилятор ругается на то, что для connect нет конструктора данного типа.
Записан
danquimby
Чайник
Offline
Сообщений: 76
НасРать :)
Re: Проблема connect разных классов.
«
Ответ #9 :
Январь 25, 2012, 19:38 »
я думаю тут уже начался флуд, так что я вроде набросал пример.
Если автор не понял, ну тогда доки в зубы.
Записан
главное не то что ты не чего не знаешь, а то что ты хочешь это узнать.
Glaciuse
Новичок
Offline
Сообщений: 6
Re: Проблема connect разных классов.
«
Ответ #10 :
Январь 25, 2012, 20:01 »
Спасибо
danquimby
,
twp
,
mutineer
за ответы, со всем разобрался.
danquimby
, большое спасибо за пример.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> Печать
=> Интернационализация, локализация
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
=> Архив
===> Программирование
=====> Python
===> Веб программирование
=====> PHP, PERL, CGI
Загружается...