में प्लगइन सिस्टम बनाने की कोशिश कर रहा है मैं एक कार्य-आधारित प्रोग्राम बना रहा हूं जिसमें प्लगइन होना आवश्यक है। कार्यों में गुणों को आसानी से संपादित किया जा सकता है, मुझे लगता है कि यह क्यूटी के मेटा-ऑब्जेक्ट कंपाइलर प्रतिबिंब क्षमताओं के साथ किया जा सकता है (मैं गलत हो सकता हूं, लेकिन मुझे इसे QtPropertyBrowser में चिपकाने में सक्षम होना चाहिए?)सी ++/क्यूटी
तो यहां आधार:
class Task : public QObject
{
Q_OBJECT
public:
explicit Task(QObject *parent = 0) : QObject(parent){}
virtual void run() = 0;
signals:
void taskFinished(bool success = true);
}
फिर एक प्लगइन इस कार्य हो सकता है:
class PrinterTask : public Task
{
Q_OBJECT
public:
explicit PrinterTask(QObject *parent = 0) : Task(parent) {}
void run()
{
Printer::getInstance()->Print(this->getData()); // fictional
emit taskFinished(true);
}
inline const QString &getData() const;
inline void setData(QString data);
Q_PROPERTY(QString data READ getData WRITE setData) // for reflection
}
संक्षेप में, यहाँ मैं क्या करना चाहते हैं:
// load plugin
// find all the Tasks interface implementations in it
// have user able to choose a Task and edit its specific Q_PROPERTY's
// run the TASK
यह महत्वपूर्ण है कि एक। डीएल में कई कार्य हैं, क्योंकि मैं उन्हें अपने मॉड्यूल से जोड़ना चाहता हूं। उदाहरण के लिए, "FileTasks.dll" में फ़ाइलों को हटाने, फ़ाइलों को बनाने, आदि के लिए कार्य हो सकते हैं।
क्यूटी के प्लगइन सेटअप के साथ एकमात्र समस्या यह है कि मैं एक .dll मॉड्यूल में X की मात्रा को संग्रहीत करना चाहता हूं। जहां तक मैं कह सकता हूं, आप प्रति प्लगइन केवल एक इंटरफेस लोड कर सकते हैं (मैं गलत हो सकता है?)। यदि ऐसा है, तो मैं जो करना चाहता हूं उसे पूरा करने का एकमात्र संभव तरीका है स्ट्रिंग आधारित कुंजी के साथ फैक्ट्रीइंटरफेस बनाना जो ऑब्जेक्ट्स (जैसे क्यूटी के प्लग-एंड-पेंट उदाहरण में) लौटाता है, जो एक भयानक बॉयलरप्लेट है जिसे मैं टालना चाहता हूं।
किसी को भी क्यूटी के मुकाबले एक क्लीनर सी ++ प्लगइन आर्किटेक्चर पता है जो मैं चाहता हूं?
इसके अलावा, मैं सुरक्षित रूप से क्यूटी के प्रतिबिंब क्षमताओं संभालने हूँ कि मैं क्या चाहते हो जाएगा (अर्थात भेजने से पहले QtPropertyBrowser के साथ एक अज्ञात गतिशील लोड कार्यों 'गुण संपादित करने में सक्षम)?
ग्रेट पढ़ा और बूट करने के लिए एक उदाहरण ढांचा समाधान। असल में यह कहता है कि आपको बॉयलरप्लेट से बचने के लिए बस एक बेहतर फैक्टरी प्रणाली की आवश्यकता है जो स्ट्रिंग कुंजी आपको देता है, मुझे लगता है कि मैं समस्या को खत्म कर रहा था। अगर मैं इसे एकीकृत कर सकता हूं तो यह शायद मेरी दुविधाओं को हल करेगा। धन्यवाद। –