* はできませんので、すべての
まず下の編集を参照してください助けてください関数にシグナルを接続する場合、それをあるクラスのスロットに接続し、このクラスのインスタンスをQObject::connect
にも提供する必要があります。
だから、まず最初に行うには、スロットを持つクラスを定義することです。このクラスはQObject
を継承し、その中Q_OBJECT
キーワードを持っている必要があること
// file 'C.h'
#ifndef __C_H__
#define __C_H__
#include <QtGui>
class C : public QObject{
Q_OBJECT
public slots:
static void insert()
{
qDebug() << "pressed";
}
};
#endif
は注意してください。 *.h
ファイルにこのクラス宣言を入れなければなりません(Qtには表示されないため、ファイル*.cpp
にはQ_OBJECT
を含めることはできません)。
今、あなたはスロットを持つクラスを持っていることを、あなたはQObject::connect
を使用することができ、適切な方法は次のようになります。あなたが接続したときに、シグナルとスロットのためSLOT()
マクロのSIGNAL()
マクロを使用する必要が
QObject::connect(button, SIGNAL(clicked()), &c, SLOT(insert()));
注意それら。次のように
だからmain.cpp
のコードは次のようになります。私はconnect()
機能へのレシーバ・オブジェクト(&c
)のインスタンスをどのように提供するかあなたが見
#include "C.h"
int main(int argc,char *argv[])
{
QApplication app(argc,argv);
QPushButton *button=new QPushButton("button");
button->setGeometry(50,100,150,80);
C c;
QObject::connect(button, SIGNAL(clicked()), &c, SLOT(insert()));
button->show();
return app.exec();
}
を、あなたの関数がstatic
であっても、それをしなければなりません。
最後に、app.exec();
にする必要があります。そうしないと、プログラムにメッセージループが発生しないためです。
EDIT:
私は質問の答えが間違っているのQt 5.0の場合はQt 5程度であったことを逃しました。
の出力が表示されない場合があります)' 'には、挿入する。 – Jichao
私はQtについて知っていませんが、あなたの関数呼び出し 'QObject :: connect'は、ここで与えられたプロトタイプ[Qt](http://qt-project.org/doc/qt-4.8/qobject.html)と一致しません。 –
また、 'main'関数の最後に' return app.exec() 'がなければこれがうまくいくとは思えません。 – Amartel