我有一个简单的 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 派生的每个类中(请参阅多重继承方法),如果从 UI::Class 类派生的类也是基类,我将能够调用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() 时,retranslateUi
都会调用该特定类。否则 changeEvent 必须在每个类中重新实现。这有点违背“代码重用”的概念。
我认为 Qt UIC 无法处理这种情况,不是吗?有没有类似的方法来解决这个问题?