1

私には2つのクラスがあり、最初のクラスには QPushButton があり、2番目のクラスには QLabel があります(「パブリック」に置きます)。ユーザーがファーストクラスのボタンをクリックすると、セカンドクラスの QLabel がテキストを変更したいと考えています。私はそれを行う関数を書くべきだと思います。ユーザーがボタンをクリックすると、ボタンはこの関数を呼び出します。これが私の関数です(私の意見では):

void A::buttonClicked(B *bClass)
{
    bClass->label->setText("Button was clicked!");
}

そして、これはファーストクラスのボタンで呼び出す方法です:

connect(button, SIGNAL(clicked()), this, SLOT(buttonClicked(B)));

しかし、クリックしても 2 番目のクラスのラベルが変更されない理由がわかりません。どうすればいいですか?申し訳ありませんが私の英語

4

2 に答える 2

2

コードの問題は、パラメーターのない信号を、1 つのパラメーターを必要とするスロットに接続しようとしていることです。

connect(button, SIGNAL(clicked()), this, SLOT(buttonClicked(B)));

アプリを実行すると、おそらく次のようなメッセージが表示されますQObject::connect: Incompatible sender/receiver arguments。だからうまくいかない。

Bこれを解決するには、クラスのテキストを変更する関数をクラスに追加するだけですQLabel

void B::changeLabelText(const QString &text)
{
   label->setText(text);
}

次に、 class の関数Aを呼び出すclass のスロットを作成し、それをボタンのクリック信号に接続します。changeLabelText(const QString &text)B

   objectB = new B;
   connect(button, SIGNAL(clicked()), this, SLOT(clickedSlot()));
   ...    

void A::clickedSlot()
{
   objectB->changeLabelText("Button clicked");
}

でスロットとして宣言することを忘れないでくださいA.h:

public slots:
    void clickedSlot();
于 2013-08-09T06:25:00.873 に答える