c++ - retranslateUi的自动调用

标签 c++ qt

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

相关文章:

c++ - 使用键盘回调事件保存屏幕截图

c++ - 将 Google 地球嵌入到桌面应用程序而非网站中。 QT 是一个真正的选择吗?

qt - 防止QGraphicsItem移出QGraphicsScene

c++ - 用于嵌入式设备的 Qt Quick 控件 2.0

c++ - 如何在 beginNativePainting() 中翻转纹理?

c++ - cmake 检测 clang-cl 为 clang

c++ - 如何正确使用作为其他定义参数的定义? C++

C++无法删除链表中的节点

c++ - 变量参数列表 : use va_list or address of formal parameter?

qt - 如何使用Qt UDP套接字发送和接收大数据?