我有一个继承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/

10-09 03:21