我有一个 myClass
基类,它继承了 QMainWindow
class myClass : public QMainWindow {
Q_OBJECT
public:
myClass(QWidget *par):QMainWindow(par);
~myClass(){};
}
和一堆子类,它们继承自相应 ui 的私有(private)成员 e.g.:
#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
所以我怀疑是否有办法,除非有一个 super 神奇的 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/