我有一个继承myClass
的基本QMainWindow
类
class myClass : public QMainWindow {
Q_OBJECT
public:
myClass(QWidget *par):QMainWindow(par);
~myClass(){};
}
以及一堆继承自相应ui的私有(private)成员的子类,例如:
#include "ui_myPluginUi.h"
class myPlugin : public myClass, private Ui::myPluginUi {
Q_OBJECT
public:
Q_INVOKABLE myPlugin(QWidget *par): myClass(par), ;
~myPlugin(){};
}
这样我就可以轻松访问Ui小部件。
我的基类
myClass
有很多方法可以加载/保存窗口首选项,在特殊小部件上进行一些连接,装饰窗口,为该窗口加载帮助页面等。他们中的大多数使用qt元系统的精彩回顾。如果从基类调用
retranslateUi
,我没有成功的一件事。我开始重新实现
changeEvent
:void myClass::changeEvent(QEvent *e)
{
QWidget::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
for(int i = 0; i < metaObject()->methodCount(); ++i)
qDebug() << i << metaObject()->method(i).methodSignature();
break;
default:
break;
}
}
但是
retranslateUi
不是方法的一部分...我已经看到实现
retranslateUi
的UI类不是QObject
,而retranslateUi
不是public slot
,所以我怀疑是否有办法,除非要进行super-magical-qt-guru-move。在@ Kevin-Kremmer答案后进行编辑:
如果我加
private slots:
virtual void retranslateUi(QMainWindow*) = 0;
我遇到了几个错误
error: allocating an object of abstract class type 'myClass'
,因为我也能够创建纯MyClass
对象,并通过QUiLoader
通过普通ui文件装饰它们。如果我定义一个
private slots:
virtual void retranslateUi(QMainWindow*) {};
这是元系统看到和调用的唯一一个...
(希望足够清楚)
最佳答案
你可以试试这个
// in myClass
private slots:
virtual void retranslateUi(QMainWindow*) = 0;
关于c++ - 自动调用retranslateUi,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41303281/