簡単なQtの質問があります。自動生成された UIC ファイルが、次のようなカスタム インターフェイス クラスから派生するようにします。
目的
class MyUiInterface {
public:
virtual void setupUi(QWidget* w) = 0;
virtual void retranslateUi(QWidget*w) = 0;
};
生成された UIC ファイルは次のようになります。
class Ui_MyWidget {
public:
void setupUi(QWidget* w) {
...
}
void retranslateUi(QWidget* w) {
...
}
};
namespace Ui {
class MyWidget : public MyUiInterface , public Ui_MyWidget {};
}
なんで?
次に、すべての Ui::Class が MyUiInterface を実装します。Ui::Class ( The Multiple Inheritance Approachを参照) から派生する各クラスでは、UI::Class クラスから派生するクラスが基本クラスである場合に意味のあるsetupUi
andを呼び出すことができます。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() が呼び出されるたびにretranslateUi
、その特定のクラスが呼び出されることです。それ以外の場合、各クラスで changeEvent を再実装する必要がありました。これは、「コードの再利用」の概念に少し反します。
Qt UIC はこの状況を処理できないと思いますね。この問題を解決する同様の方法はありますか?