私は簡単なQt質問をしました。UICがカスタムインターフェイスからQt UIクラスを生成しました
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;
};
生成UICファイルは次のようになります。私は、自動的に生成されたUICファイルは中のようなカスタムインターフェイスクラスから派生していることをしたいですか?
すべてのUi :: ClassはMyUiInterfaceを実装します。 Ui :: Class(The Multiple Inheritance Approachを参照)から派生する各クラスでは、setupUi
とretranslateUi
を呼び出すことができます。これは、UI :: Classクラスから派生したクラスが基本クラスの場合でも意味があります。すべてのウィジェットを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
が呼び出され、callledされます。それ以外の場合は、各クラスでchangeEventを再実装する必要がありました。これは "コード再利用"の概念とは少し違うでしょう。
Qt UICはこの状況を処理できないと思いますか?この問題を解決するための同様の方法はありますか?
+1大きな質問! – cmannett85