自动调用retranslateUi

时间:2016-12-23 14:32:24

标签: c++ qt

我有一个继承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类不是QObjectretranslateUi不是public slot所以我怀疑除非有办法有一个超级神奇的qt-guru-move要做。

编辑@ Kevin-Kremmer回答如下:

如果我添加

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*) {};

这是元系统看到和调用的唯一一个......

(希望足够清楚)

1 个答案:

答案 0 :(得分:1)

你可以试试这个

// in myClass
private slots:
    virtual void retranslateUi(QMainWindow*) = 0;