Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: von_Manstein от Август 06, 2011, 08:44



Название: Соединение сигналов со слотами
Отправлено: 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`а, вроде...


Название: Re: Соединение сигналов со слотами
Отправлено: Странник от Август 06, 2011, 09:29
а заголовочные файлы <QPushButton> и <QApplication> подключены? или компилятор догадываться должен, от кого они там унаследованы?


Название: Re: Соединение сигналов со слотами
Отправлено: von_Manstein от Август 06, 2011, 09:32
В main.cpp подключен QApplication и хедер моего класса, а уже в хедере подключен QPushButton. Врят ли это была бы причина, иначе бы он написал, что таких классов вообще нет, а тут именно на функцию.

Он ругнулся, как я понял на то, что ему не нравится что вместо параментра QObject*, я ему кормлю QPushButton*. Ну так кнопка - наследница от QObject. Или я не понимаю чего-то?


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


Название: Re: Соединение сигналов со слотами
Отправлено: von_Manstein от Август 06, 2011, 09:49
Проблема была решена по-другому. Соединение было произведено в конструкторе моего класса через qApp (глобальный указатель на qapplication).

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

И тем не менее, как же подключать правильно, чтобы связь он понял?


Название: Re: Соединение сигналов со слотами
Отправлено: von_Manstein от Август 06, 2011, 09:55
Итого, в мейн был включён модуль QtGui и хедер класса.
В классе были декларированы все используемые классы.
В файле реализации класса были подключены хедеры всех элементов интерфейса и qapplication.

Вопрос: ничего лишнего я не наподключал и не подключил ли чего два раза? Хотя защита от повторного включения есть, но всё же. можно ли проще?


Название: Re: Соединение сигналов со слотами
Отправлено: Странник от Август 06, 2011, 10:02
Итого, в мейн был включён модуль QtGui и хедер класса.
В классе были декларированы все используемые классы.
В файле реализации класса были подключены хедеры всех элементов интерфейса и qapplication.

Вопрос: ничего лишнего я не наподключал и не подключил ли чего два раза? Хотя защита от повторного включения есть, но всё же. можно ли проще?
QtGui в main.cpp можно не включать, хедера класса достаточно. а коннект в конструкторе смотрится логичней.


Название: Re: Соединение сигналов со слотами
Отправлено: von_Manstein от Август 06, 2011, 10:15
Насчёт логичней да, согласен. А вот если не включать QtGui в мейн, то получаю вот что:
QApplication считает не объявленным.

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

А вот в мейне не включать не получается, требует, чтоб объявлен был. Приходится в двух местах подключать.


Название: Re: Соединение сигналов со слотами
Отправлено: Странник от Август 06, 2011, 11:01
Насчёт логичней да, согласен. А вот если не включать QtGui в мейн, то получаю вот что:
QApplication считает не объявленным.

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

А вот в мейне не включать не получается, требует, чтоб объявлен был. Приходится в двух местах подключать.
защита есть, конечно. но в main.cpp достаточно <QApplication>, зачем весь <QtGui>.


Название: Re: Соединение сигналов со слотами
Отправлено: von_Manstein от Август 06, 2011, 20:32
Спасибо за помощь!