Ho una domanda Qt semplice. Voglio che i file UIC generate automaticamente derivano da una classe di un'interfaccia personalizzata come in:Derive UIC ha generato la classe dell'interfaccia utente Qt dall'interfaccia personalizzata
Intenzione
class MyUiInterface {
public:
virtual void setupUi(QWidget* w) = 0;
virtual void retranslateUi(QWidget*w) = 0;
};
file di UIC generato dovrebbe essere simile:
class Ui_MyWidget {
public:
void setupUi(QWidget* w) {
...
}
void retranslateUi(QWidget* w) {
...
}
};
namespace Ui {
class MyWidget : public MyUiInterface , public Ui_MyWidget {};
}
Perché?
Ogni Ui :: Class sarebbe quindi implementare MyUiInterface. In ogni classe che deriva da Ui :: Class (vedi The Multiple Inheritance Approach) sarei stato in grado di chiamare setupUi
e retranslateUi
che ha senso se la classe che deriva dalla UI :: classe Class è una classe di base sia. Voglio che ogni widget sia derivato dalla mia classe base abstrcat MyWidgetBase
. Prendere in considerazione seguente:
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 {
};
L'effetto è, ogni volta myWidget :: ChangeEvent() è callled, retranslateUi
di quella specifica classe si chiama. Altrimenti changeEvent doveva essere reimplementato in ogni classe. Questo sarebbe un po 'contrario al concetto di "riutilizzo del codice".
Penso Qt UIC non è in grado di gestire questa situazione non è vero? C'è un modo simile per risolvere questo problema?
+1 Ottima domanda! – cmannett85