多数のヘルプ ディスカッションを検索し、複数のチュートリアルを読みましたが、Qt シグナルとスロットの正しい構文をまだ理解していません。Qt Core 5.0 を使用して、この構文を理解しようとする 2 つのオブジェクトを持つ非常に単純なプログラムを作成しました。(下に示された)。このコードをコンパイルするたびに、次のエラーが発生します。
「int」の前に一次式が必要です
次の答えを教えてください。
私が書いたコードの問題は何ですか?
Qt connect 関数は、オブジェクトを直接参照するのではなく、オブジェクト参照 (&mySig) のポインターを期待していますか?
パラメータを含むスロットと信号を接続関数で使用する場合、これらのパラメータに変数を指定する必要がありますか?それとも、以下のコードに示すようにデータ型を指定する必要がありますか?
最終的には、スロットとシグナルを使用して、作成中のプログラム内のオブジェクト間でデータを渡したいと考えています。スロットとシグナルは、QObject から派生した他のオブジェクトを渡すことを許可しますか? それとも、何か特別なことをする必要がありますか?
を使用する接続ステートメントの形式への参照が多く見られます
QObject::contect(&mySig, SIGNAL(sig_1(int)), &mySlot, SLOT(slot1(int)));
この形式は Qt 5.0 Core でも有効ですか?
すべての助けに感謝します!以下に簡単なプログラムのコードを示します。
#include <QCoreApplication>
#include <QObject>
#include <iostream>
using namespace std;
//================================================================================
class testSig : public QObject
{
Q_OBJECT
public:
explicit testSig(QObject *parent = 0) :
QObject(parent)
{
}
void getNum()
{
int t;
cout << endl << endl << "Please Enter Number: ";
cin >> t;
emit sig_1(t);
}
signals:
void sig_1(int i );
};
//================================================================================
class testSlot : public QObject
{
Q_OBJECT
public:
explicit testSlot(QObject *parent = 0) :
QObject(parent)
{
}
public slots:
void slot1(int i)
{
cout << "New Value is: " << i << endl;
}
};
//=================================================================================
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
testSig mySig;
testSlot mySlot;
QObject::connect(&mySig, testSig::sig_1(int), &mySlot, testSlot::slot1(int));
for( ; ; )
{
mySig.getNum();
}
return a.exec();
}