Как я могу соединить сигналы и слоты разных объектов в Qt? - PullRequest
3 голосов
/ 10 мая 2011

У меня есть сомнения в QT c ++

Предположим, это main.cpp

#include "head.h"
#include "tail.h"

int main()
{
  head *head_obj = new head();
  tail *tail_obj = new tail();
  //some code
}

вот голова.ч

class head:public QWidget
{
  Q_OBJECT

  /* some code */

  public slots:
  void change_number();
};

вот хвост.

class tail:public QWidget
{
Q_OBJECT

  /* some code */
  /* some code */
  QPushButton *mytailbutton = new QPushButton("clickme");

  //this is where i need help
  connect(button,SIGNAL(clicked()),?,?);

};

Теперь, как мне подключить сигнал clicked () кнопки mytailbutton к слоту head_schange change_number? Я просто чувствую, что это невозможно.

Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 10 мая 2011

Вы подключаете сигналы и слоты экземпляров, а не классов.

Вам нужен адрес как объекта-получателя, так и объекта-эмиттера, чтобы соединить их вместе.

connect(button, SIGNAL(clicked()),
        pointer_to_instance_of_head, SLOT(change_number()));

(при условии, что «кнопка» является указателем).

Получение этого указателя - это еще один вопрос, но если у вас нет веских причин поступать иначе, я предлагаю создать объект head в конструкторе QWidget, который вы выводите.

0 голосов
/ 10 мая 2011

Что ж, если предположить, что все так просто, как вы показываете свой действительно сокращенный код, все должно быть просто

connect( aTailInstance->tailButon, SIGNAL( clicked() ), aHeadInstance, SLOT( change_number() ) );

Однако, с помощью кода, который вы показали здесь, невозможно определить, какой тип функциональности вы используете, и не совсем понятно, о чем вы спрашиваете.

...