Russian Qt Forum
Ноябрь 25, 2024, 16:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Соединение сигналов со слотами  (Прочитано 3268 раз)
von_Manstein
Гость
« : Август 06, 2011, 08:44 »

Доброго всем дня.

Выдал вот такую вещь мне компилятор, хотя казалось бы:
no matching function for call to 'QObject::connect(QPushButton*, const char*, QApplication*, const char*, Qt::ConnectionType)

вот на такой кусок кода:
Код:
QObject::connect(
                      theInt.getExitPointer(),
                      SIGNAL(clicked()),
                      &app,
                      SLOT(quit()),
                      Qt::AutoConnection
                     );
где theInt - пользовательский класс, наследован от QWidget
функция getExitPointer() имеет следующую реализацию:
Код:
MyInterfaceMaker::getExitPointer()
{
  return pExit;
};
Не пойму, как тогда ещё при таком подходе связать сигнал clicked() кнопки, инициализированной в конструкторе этого моего класса со слотом quit() приложения app, созданного в main()?

Ведь QPushButton наследован от QObject`а, вроде...
« Последнее редактирование: Август 06, 2011, 09:25 от von_Manstein » Записан
Странник
Гость
« Ответ #1 : Август 06, 2011, 09:29 »

а заголовочные файлы <QPushButton> и <QApplication> подключены? или компилятор догадываться должен, от кого они там унаследованы?
Записан
von_Manstein
Гость
« Ответ #2 : Август 06, 2011, 09:32 »

В main.cpp подключен QApplication и хедер моего класса, а уже в хедере подключен QPushButton. Врят ли это была бы причина, иначе бы он написал, что таких классов вообще нет, а тут именно на функцию.

Он ругнулся, как я понял на то, что ему не нравится что вместо параментра QObject*, я ему кормлю QPushButton*. Ну так кнопка - наследница от QObject. Или я не понимаю чего-то?
« Последнее редактирование: Август 06, 2011, 09:39 от von_Manstein » Записан
Странник
Гость
« Ответ #3 : Август 06, 2011, 09:39 »

В main.cpp подключен QApplication и хедер моего класса, а уже в хедере подключен QPushButton. Врят ли это была бы причина, иначе бы он написал, что таких классов вообще нет, а тут именно на функцию.
если в хедере у вас объявлен class QPushButton - не написал бы. есть функция QObject::connect(QObject*, const char*, QObject*, const char*, Qt::ConnectionType), очевидно компилятор не улавливает связи между QPushButton и QObject. проверьте все же хедер.
Записан
von_Manstein
Гость
« Ответ #4 : Август 06, 2011, 09:49 »

Проблема была решена по-другому. Соединение было произведено в конструкторе моего класса через qApp (глобальный указатель на qapplication).

Насчёт связи да, очевидно, ему не указано что-то или я не так подключил. В принципе теперь задача выполнена и можно спокойно обсуждать  Подмигивающий

И тем не менее, как же подключать правильно, чтобы связь он понял?
Записан
von_Manstein
Гость
« Ответ #5 : Август 06, 2011, 09:55 »

Итого, в мейн был включён модуль QtGui и хедер класса.
В классе были декларированы все используемые классы.
В файле реализации класса были подключены хедеры всех элементов интерфейса и qapplication.

Вопрос: ничего лишнего я не наподключал и не подключил ли чего два раза? Хотя защита от повторного включения есть, но всё же. можно ли проще?
Записан
Странник
Гость
« Ответ #6 : Август 06, 2011, 10:02 »

Итого, в мейн был включён модуль QtGui и хедер класса.
В классе были декларированы все используемые классы.
В файле реализации класса были подключены хедеры всех элементов интерфейса и qapplication.

Вопрос: ничего лишнего я не наподключал и не подключил ли чего два раза? Хотя защита от повторного включения есть, но всё же. можно ли проще?
QtGui в main.cpp можно не включать, хедера класса достаточно. а коннект в конструкторе смотрится логичней.
Записан
von_Manstein
Гость
« Ответ #7 : Август 06, 2011, 10:15 »

Насчёт логичней да, согласен. А вот если не включать QtGui в мейн, то получаю вот что:
QApplication считает не объявленным.

А в принципе, даже если я два раза напишу подключить одно и тоже, физически этого поидее не произойдёт, ведь есть препроцессорная защита от этого, так? И на программе не отразиться, так?

А вот в мейне не включать не получается, требует, чтоб объявлен был. Приходится в двух местах подключать.
« Последнее редактирование: Август 06, 2011, 10:17 от von_Manstein » Записан
Странник
Гость
« Ответ #8 : Август 06, 2011, 11:01 »

Насчёт логичней да, согласен. А вот если не включать QtGui в мейн, то получаю вот что:
QApplication считает не объявленным.

А в принципе, даже если я два раза напишу подключить одно и тоже, физически этого поидее не произойдёт, ведь есть препроцессорная защита от этого, так? И на программе не отразиться, так?

А вот в мейне не включать не получается, требует, чтоб объявлен был. Приходится в двух местах подключать.
защита есть, конечно. но в main.cpp достаточно <QApplication>, зачем весь <QtGui>.
Записан
von_Manstein
Гость
« Ответ #9 : Август 06, 2011, 20:32 »

Спасибо за помощь!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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