我有一个继承myClass
QMainWindow
类
class myClass : public QMainWindow {
Q_OBJECT
public:
myClass(QWidget *par):QMainWindow(par);
~myClass(){};
}
和一堆继承自其对应的ui 的私有成员的子类,例如:
#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-metasystem的精彩回顾。如果从基类调用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
所以我怀疑除非有办法有一个超级神奇的qt-guru-move要做。
如果我添加
private slots:
virtual void retranslateUi(QMainWindow*) = 0;
我收到了一些错误error: allocating an object of abstract class type 'myClass'
,因为我还能够创建纯MyClass
个对象并通过普通的ui文件通过QUiLoader
装饰它们......
如果我定义了
private slots:
virtual void retranslateUi(QMainWindow*) {};
这是元系统看到和调用的唯一一个......
(希望足够清楚)
答案 0 :(得分:1)
你可以试试这个
// in myClass
private slots:
virtual void retranslateUi(QMainWindow*) = 0;