से यूआईसी उत्पन्न क्यूटी यूआई कक्षा उत्पन्न करें मेरे पास एक साधारण क्यूटी प्रश्न है। मैं चाहता हूँ कि स्वचालित रूप से उत्पन्न यूआईसी फाइलों में की तरह एक कस्टम इंटरफ़ेस वर्ग से प्राप्त कर रहे:कस्टम इंटरफ़ेस
class Ui_MyWidget {
public:
void setupUi(QWidget* w) {
...
}
void retranslateUi(QWidget* w) {
...
}
};
namespace Ui {
class MyWidget : public MyUiInterface , public Ui_MyWidget {};
}
क्यों:
इरादा
class MyUiInterface {
public:
virtual void setupUi(QWidget* w) = 0;
virtual void retranslateUi(QWidget*w) = 0;
};
जनरेट किया यूआईसी फ़ाइल की तरह दिखना चाहिए?
प्रत्येक यूआई :: क्लास MyUiInterface लागू करेगा। यूआई :: कक्षा से प्राप्त प्रत्येक वर्ग में (The Multiple Inheritance Approach देखें) मैं setupUi
और retranslateUi
पर कॉल करने में सक्षम होगा, जो समझ में आता है कि यूआई :: क्लास क्लास से प्राप्त कक्षा या तो बेस क्लास है। मैं चाहता हूं कि प्रत्येक विजेट को मेरे abstrcat बेस क्लास MyWidgetBase
से निकाला जाए। निम्नलिखित पर विचार करें:
class MyWidgetBase abstract : public QWidget, protected MyUiInterface {
protected:
void changeEvent(QEvent *e) {
QWidget::changeEvent(e);
if (e->type() == QEvent::LanguageChange) {
retranslateUi(this); // Still abstract here
}
}
};
class MyWidget : public MyWidgetBase : public Ui::MyWidget {
};
प्रभाव है, हर बार जब MyWidget :: changeEvent() callled है, उस विशिष्ट वर्ग के retranslateUi
कहा जाता है। अन्यथा प्रत्येक वर्ग में परिवर्तन को पुन: कार्यान्वित किया जाना था। यह "कोड पुन: उपयोग" अवधारणा के खिलाफ थोड़ा सा होगा।
मुझे लगता है कि क्यूटी यूआईसी इस स्थिति को संभालने में सक्षम नहीं है? क्या इस समस्या को हल करने का कोई ही तरीका है?
+1 महान प्रश्न! – cmannett85