3

QT c++に疑問があります

これが main.cpp だとします

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

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

ここに頭があります.h

class head:public QWidget
{
  Q_OBJECT

  /* some code */

  public slots:
  void change_number();
};

ここにテールがあります.h

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()),?,?);

};

mytailbutton の信号 clicked() を head クラスのスロット change_number に接続するにはどうすればよいですか? これが可能になる方法はないと感じています。

お手伝いありがとう!

4

2 に答える 2

1

クラスではなく、インスタンスのシグナルとスロットを接続します。

レシーバー オブジェクトとエミッター オブジェクトを接続するには、両方のアドレスが必要です。

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

(「ボタン」がポインタであると仮定します)。

そのポインターを取得することは別の問題ですが、他に行う正当な理由がない限り、QWidget派生しているコンストラクターで head オブジェクトを構築することをお勧めします。

于 2011-05-10T16:21:13.300 に答える
0

まあ、すべてが本当に短縮されたコードを示すのと同じくらい単純であると仮定すると、それは単純なはずです

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

ただし、ここに示したコードでは、どのような機能を求めているのかを判断することは不可能であり、何を求めているのか正確にはわかりません。

于 2011-05-10T16:25:31.287 に答える