gpt4 book ai didi

c++ - tr() 函数不再工作从 Qt 4 迁移到 Qt 5

转载 作者:行者123 更新时间:2023-11-30 05:19:59 24 4
gpt4 key购买 nike

我有一个以通常方式成功安装翻译器的应用程序:

bool bSuccess = qApp->installTranslator(m_translator);

其中 m_translator 是指向从 QTranslator 派生的类的指针。

当使用 Qt 4.7.4 编译应用程序时,以下所有指令都可以正常工作:

  1. QString qTranslString = m_translator->translate("", "string_to_be_translated");
  2. QString qTranslString = QCoreApplication::translate("", "string_to_be_translated");
  3. QString qTranslString = tr("string_to_be_translated");

但是当相同的应用程序、相同的项目设置在 Windows 或 Linux 上使用 Qt 5.2.1 编译时,只有编号 1 有效。 另外两个没有调用m_translator的translate方法。

这是重现问题的最小示例:

minimalpbm.pro:

greaterThan(QT_MAJOR_VERSION, 4) {
QT += widgets
}

TARGET = minimalpbm
TEMPLATE = app

SOURCES += main.cpp
HEADERS += mytranslator.h

mytranslator.h:

#include <QTranslator>

class MyTranslator : public QTranslator
{
Q_OBJECT

public:
explicit MyTranslator(QObject *parent = 0);
~MyTranslator();

bool isEmpty() const;
QString translate(const char *context, const char *sourceText, const char *comment = 0) const;

private:
};

ma​​in.cpp:

#include <QApplication>
#include <QMainWindow>
#include "mytranslator.h"

MyTranslator::MyTranslator(QObject *parent) : QTranslator(parent)
{
}

MyTranslator::~MyTranslator()
{
}

bool MyTranslator::isEmpty() const
{
return false;
}

QString MyTranslator::translate(const char* /*context*/, const char* sourceText, const char* /*comment*/) const
{
QString translation;

(void) sourceText;

translation = "Window Title"; // No matter what the source text is we return the same translation for test

return translation;
}

int main(int argc, char *argv[])
{
QApplication qA(argc, argv);

QMainWindow qW; // Create main window

MyTranslator *m_translator = new MyTranslator(&qW); // Install translator
qApp->installTranslator(m_translator);

qW.setWindowTitle(qW.tr("ST_TITLE")); // Set title
qW.show(); // Show main window

return qA.exec(); // Main event loop
}

对于 Qt4,窗口标题是“Window Title”,对于 Qt5,窗口标题是“ST_TITLE”。

有什么提示吗?非常感谢您!

最佳答案

MyTranslator::translate 是否仍然覆盖了 QTranslator 虚拟方法?在阅读 QT 5.2.0 文档时,您要覆盖的方法已被删除。我建议尝试使用 4 个参数而不是 3 个来覆盖翻译方法,所以 translate(const char *context, const char *sourceText, const char *disambiguation = Q_NULLPTR, int n = -1) const。还要在其后面加上override关键字,这样编译器就会对此类问题发出警告。

关于c++ - tr() 函数不再工作从 Qt 4 迁移到 Qt 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40890915/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com