क्यूटी के साथ मेरी अधिकांश पकड़ें आती हैं इस तथ्य से कि एपीआई QObject द्वारा प्रदान की गई गतिशीलता को पूरी तरह से गले लगाता नहीं है। यदि आप सी ++ में गतिशील व्यवहार जोड़ने के लिए मेटा-ऑब्जेक्ट कंपाइलर बनाने की हिम्मत करते हैं, तो इसके बारे में शर्मिंदा क्यों हो?
नीचे दी गई सभी चीजें हैं जो मेरी टीम को किसी बिंदु पर चाहिए और हमें इसे स्वयं कोड करना था। यह बहुत मजेदार था और हमने क्यूटी आंतरिक के बारे में बहुत कुछ सीखा, लेकिन अगर यह पहले से ही किया गया था और उपयोग करने के लिए तैयार था तो मुझे कोई फर्क नहीं पड़ता।
नहीं QObject
आप कोको में की तरह पता है, वितरित। वे QtDBus के साथ आधा रास्ता चला गया - नेटवर्किंग करने के लिए छोड़ दिया केवल एक चीज है। हमें इसके लिए अपना स्वयं का समाधान लागू करना पड़ा, और चूंकि हम क्यूटी कोड के बाहर रहते हैं, इसलिए हम सभी अच्छी सुविधाओं को लागू करने के लिए आंतरिक नहीं बदल सकते हैं।
डेटा भंडारण
के लिए और निश्चित रूप से हर किसी को कोई API अपने स्वयं अधूरा QObject करने वाली SQLite पुस्तकालय लिखता है। QDataStream हालांकि, एक बहुत अच्छी शुरुआत है।
कोई डेटा बाइंडिंग
ठीक है, क्यूटी त्वरित डेटा बाइंडिंग, लेकिन डेटा बाइंडिंग QtCore में रहते हैं चाहिए। सभ्य डेटा बाध्यकारी के साथ, QAbstractItemModels लिखना जो QObjects के संग्रह का प्रतिनिधित्व करते हैं, अतीत की बात होनी चाहिए: QObjectListModel आपको बस चाहिए।
कोई स्वत: पूर्ववत प्रबंधन QObjects के लिए (हाँ, QDataWidgetMapper एक मजाक है।)
हमारे मॉडल वर्गों आमतौर पर QObjects और Q_PROPERTY एक वैकल्पिक सूचित संकेत है कि वास्तव में क्या लागू करने की जरूरत उपलब्ध है या नहीं स्वचालित पूर्ववत करें। ऐसा करना इतना आसान है कि यह पहले से ही क्यूटी का हिस्सा होना चाहिए। (यह कुछ ही kludges तथापि की आवश्यकता है,।)
कोई संग्रह गुण
नहीं सभी गुण बराबर पैदा होते हैं। उनमें से कुछ संग्रह हैं। एक अमूर्त तरीके से उनसे निपटने में सक्षम होना निश्चित रूप से एक अच्छी बात होगी।
आधा बेक्ड QMetaStuff एपीआई
और मैं केवल इस एपीआई नफरत है क्योंकि मैं इसे प्यार करता हूँ। उदाहरण के लिए, कोई नहीं कर सकता:
- गतिशील रूप से QMetaObjects का निर्माण और उन्हें प्रतिस्थापित करें;
- तर्क के रूप में एक QVariants का उपयोग कर मेटा-विधि को कॉल करें;
- वापसी प्रकार, नाम या तर्क प्रकार के द्वारा क्वेरी विधियां;
- संबंधित QMetaMethods (at least not until 4.8) का उपयोग करके सिग्नल और स्लॉट कनेक्ट करें;
- अवरोध संपत्ति सेट/उसी तरह से प्राप्त करें जैसे आप घटनाओं को रोक सकते हैं, उदाहरण के लिए।
लगभग सभी को आसानी से काम किया जा सकता है। # 2 के लिए एक समाधान:
QVariant call(QObject* object, QMetaMethod metaMethod, QVariantList args)
{
QList<QGenericArgument> arguments;
for (int i = 0; i < args.size(); i++) {
// Notice that we have to take a reference to the argument. A
// const_cast is needed because calling data() would detach
// the QVariant.
QVariant& argument = args[i];
QGenericArgument genericArgument(
QMetaType::typeName(argument.userType()),
const_cast<void*>(argument.constData())
);
arguments << genericArgument;
}
QVariant returnValue(QMetaType::type(metaMethod.typeName()),
static_cast<void*>(NULL));
QGenericReturnArgument returnArgument(
metaMethod.typeName(),
const_cast<void*>(returnValue.constData())
);
// Perform the call
bool ok = metaMethod.invoke(
object,
Qt::AutoConnection, // In case the object is in another thread.
returnArgument,
arguments.value(0),
arguments.value(1),
arguments.value(2),
arguments.value(3),
arguments.value(4),
arguments.value(5),
arguments.value(6),
arguments.value(7),
arguments.value(8),
arguments.value(9)
);
if (!ok) {
// Handle the error...
} else {
return returnValue;
}
}
उपयोगी सुविधाओं शायद
क्यूटी-हित में बात करते हैं कि DOM, style sheets, और custom file engines क्यूटी के भविष्य के संस्करण में हटा दिया जाएगा नहीं है हटा दिया जाएगा।
फ़ोनॉन कोई पार मंच बैक-एंड है
वास्तव में हर समय काम नहीं कर इसके अलावा, फ़ोनॉन कोई स्थिर बैक-एंड कि तीन सबसे आम प्लेटफार्मों पर काम करता है: विंडोज, लिनक्स और मैक ओएस एक्स एक वीएलसी बैक-एंड है, लेकिन यह निश्चित रूप से स्थिर नहीं है, इसकी लाइसेंसिंग अस्पष्ट है और इसके अलावा, मैक के लिए वीएलसी समर्थन "resting on shaky ground" है। निश्चित रूप से दोष पूरी तरह से लिनक्स पर है। मल्टीमीडिया समर्थन में never beenone of its strengths है। इसमें क्विकटाइम या डायरेक्टस्टफ जैसी कुछ कमी नहीं है।
नहीं क्रिप्टो वर्ग
वहाँ QCryptographicHash और QSSLSocket (और इसके funny error modes) है, और बस इतना ही। सौभाग्य से, इस अंतर को भरने के लिए दो अच्छी पुस्तकालय हैं: Botan और QCA। क्यूसीए क्यूटी पर आधारित है, लेकिन जावा एपीपीओ कक्षाओं से इसकी एपीआई कॉपी करता है, इसलिए बहुत अच्छा नहीं है। बॉटन में निफ्टी इंटरफेस है और (लेकिन?) "शुद्ध" सी ++ है। एक क्यूटी शैली क्रिप्टो पुस्तकालय अभी भी कमी है।
यह लगभग क्यूटी जैसे लोगों की आलोचना करने के लिए बहुत अधिक दिखता है :-) – Tuminoid
मैं और अधिक शानदार उत्तर पाने के लिए एक और +50 बक्षीस डालूंगा! रखो और आओ। – Tuminoid
दूसरे बक्षीस पर 2 दिन शेष, क्यूटी के साथ अपने मुद्दों को लाएं और आप उन्हें कैसे बाधित करते हैं, या आप उन्हें कैसे ठीक करना चाहते हैं! – Tuminoid