2013-02-23 42 views
5

का कॉलिंग छोड़ने की विधि अगर मैं सीधे छोड़ने() विधि का उपयोग करने का प्रयास करता हूं, तो यह पूरी तरह से संकलित हो रहा है, हालांकि रनटाइम के दौरान "ऑब्जेक्ट :: कनेक्ट: ऐसा कोई स्लॉट myClass :: छोड़ नहीं है() । " तो इससे बचने के लिए, क्या कोई रास्ता है? एक विधि का उपयोग करके छोड़ेंचित्र() (स्लॉट के रूप में परिभाषित) आवेदन ठीक काम कर रहा है। क्या यह एकमात्र समाधान है?क्यूएप्लिकेशन

myClass::myClass(QWidget *parent) 
    : QWidget(parent) 
{ 
    QWidget *window = new QWidget; 
    window->setWindowTitle(QObject::tr("Class")); 

    QPushButton *quitButton = new QPushButton("&Quit"); 
// QObject::connect(quitButton, SIGNAL(clicked()), this, SLOT(quit()));  //showing run time error 
    QObject::connect(quitButton, SIGNAL(clicked()), this, SLOT(quitPicture())); //working perfectly 

    QHBoxLayout *layout = new QHBoxLayout; 
    layout->addWidget(this); 
    layout->addWidget(quitButton); 
    window->setLayout(layout); 
    window->show(); 
} 

void myClass::quitPicture() 
{ 
    std::cout << "calling quitPicture" << std::endl; 
    QApplication::quit(); 
} 

उत्तर

11

बटन के clicked संकेत आवेदन के quit स्लॉट के लिए सीधे जोड़ा जा सकता है:

QObject::connect(quitButton, SIGNAL(clicked()), 
       QApplication::instance(), SLOT(quit())); 
+1

आपको बहुत बहुत धन्यवाद। यह काम करता हैं :) – suma

0

इस उत्तर क्यूटी में नए संकेत/स्लॉट वाक्य रचना को शामिल किया गया है और यह भी अतिरिक्त यह जब एक संकेत का उपयोग कर कैसे संभाल करने के लिए शामिल किया गया है जो ओवरलोड का उपयोग करता है।

QObject एक उदाहरण वस्तु के रूप में उपयोग करते हुए कोई भार के साथ संकेतों के लिए:

QObject obj(nullptr); 

QObject::connect(&obj, &QObject::destroyed, QCoreApplication::instance(), \ 
&QCoreApplication::quit); 

संकेतों के लिए QProcess एक उदाहरण वस्तु के रूप में उपयोग करते हुए भार के साथ:

QProcess * process = new QProcess(QCoreApplication::instance()); 

QObject::connect(process, static_cast<void (QProcess::*)(int)>(&QProcess::finished), \ 
        QCoreApplication::instance(), &QCoreApplication::quit); 

पागल दिखने वाक्य रचना मूल रूप से यह है कि, प्लेसहोल्डर सिंटैक्स के रूप में:

static_cast< _signalReturnType_(_ObjectName::*_)(_overloadType1_, _overloadType2_, \ 
…etc)>(_&ObjectName::signalName_) 

आपदेख सकते हैं 210 यदि आप विवरण क्यों चाहते हैं।

QProcess * process = new QProcess(QCoreApplication::instance()); 

QObject::connect(process, static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(\ 
&QProcess::finished), QCoreApplication::instance(), &QCoreApplication::quit); 

इस पागल दिखने सामान अपने सिर कताई जाता है, यह पसीना नहीं आता:

के बाद से QProcess दो भार के है, यह इसके लिए अन्य अधिभार है। आप यहां प्रश्नों पर टिप्पणी कर सकते हैं, क्योंकि मैं आम तौर पर दैनिक दैनिक, या कम से कम आजकल जांचता हूं।

0
void my_exit_func() 
{ 
    // in mainwindow.cpp 
    delete MainWindow; 
} 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^