* नीचे देखें
सबसे पहले संपादित करें आप नहीं कर सकते किसी फ़ंक्शन पर सिग्नल कनेक्ट करें, आपको इसे किसी वर्ग के स्लॉट से कनेक्ट करना चाहिए, और इस वर्ग का एक उदाहरण QObject::connect
पर भी प्रदान किया जाना चाहिए।
तो ऐसा करने के लिए पहली बात एक स्लॉट के साथ एक वर्ग को परिभाषित करने के लिए है:
// 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
नोट इस वर्ग QObject
से प्राप्त करना और Q_OBJECT
कीवर्ड इसके अंदर है करने के लिए है। आपको *.h
फ़ाइल में इस कक्षा की घोषणा करना है (की *.cpp
फाइलों में नहीं है क्योंकि क्यूटी इसे नहीं देख पाएगी)।
अब जबकि आपने एक स्लॉट के साथ एक वर्ग है, तो आप QObject::connect
उपयोग कर सकते हैं, उचित तरीके से होगा:
QObject::connect(button, SIGNAL(clicked()), &c, SLOT(insert()));
नोट जब आप कनेक्ट स्लॉट के लिए संकेतों के लिए SIGNAL()
मैक्रो और SLOT()
मैक्रो का उपयोग करने के लिए है कि उन्हें।
तो main.cpp
में कोड इस प्रकार होना चाहिए:
#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();
}
आप देखते हैं कि कैसे मैं एक रिसीवर वस्तु (&c
) connect()
कार्य करने के लिए का एक उदाहरण प्रदान करते हैं, तो आप अपने समारोह static
, भले ही वह क्या करना है ।
और अंत में आपको app.exec();
होना चाहिए क्योंकि अन्यथा आपके प्रोग्राम में संदेश लूप नहीं होगा।
संपादित करें:
मैं याद किया है कि प्रश्न क्यूटी 5.0 के लिए क्यूटी 5. के बारे में था जवाब गलत है।
के उत्पादन में मैं क्यूटी 5 के बारे में ज्यादा पता नहीं है देख सकते हैं, लेकिन मैं आप() 'को' 'डालने में parathesis दूर करने के लिए की जरूरत है insert'। – Jichao
मुझे क्यूटी के बारे में पता नहीं है लेकिन आपका फ़ंक्शन कॉल 'QObject :: कनेक्ट' यहां दिए गए प्रोटोटाइप से मेल नहीं खाता है [Qt] (http://qt-project.org/doc/qt-4.8/qobject.html)। –
इसके अलावा, मुझे संदेह है कि यह 'मुख्य' फ़ंक्शन के अंत में 'return app.exec()' के बिना काम करेगा। – Amartel