gpt4 book ai didi

c++ - QTranslator:为什么app有些地方没有翻译?

转载 作者:行者123 更新时间:2023-11-30 02:18:09 26 4
gpt4 key购买 nike

有一个可用的应用程序,我正在为 GUI 添加一种新语言。一切正常,但应用程序的某些部分根本没有翻译。 QLinguist 检测到所有这些,我添加了新的翻译,但仍然没有结果。

这是没有得到翻译的代码片段:

“imagecropwindow_p.h”:

#include <QWidget>

class QLabel;
class QPushButton;
class QHBoxLayout;
class QVBoxLayout;
class QFrame;

class CropWindowComponents: public QWidget
{
public:
CropWindowComponents(QWidget *parent = nullptr);

QPushButton *changeBtn;
QPushButton *cropBtn;
QPushButton *continueBtn;
QPushButton *cancelBtn;
};

class HorizontalWindow : public CropWindowComponents
{
Q_OBJECT
public:
HorizontalWindow(QWidget *parent = nullptr);
};

class VerticalWindow : public CropWindowComponents
{
Q_OBJECT
public:
VerticalWindow(QWidget *parent = nullptr);
};

“imagecropwindow_p.cpp”:

#include "imagecropwindow_p.h"

#include <QLabel>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>

CropWindowComponents::CropWindowComponents(QWidget *parent) :
QWidget(parent)
{
changeBtn = new QPushButton(tr("Change"), this);
cropBtn = new QPushButton(tr("Crop"), this);
continueBtn = new QPushButton(tr("Continue"), this);
cancelBtn = new QPushButton(tr("Cancel"), this);
}

HorizontalWindow::HorizontalWindow(QWidget *parent) :
CropWindowComponents(parent)
{
QHBoxLayout *btnsLyt = new QHBoxLayout;
btnsLyt->setMargin(0);
btnsLyt->addWidget(changeBtn);
btnsLyt->addWidget(cropBtn);
btnsLyt->addWidget(continueBtn);
btnsLyt->addWidget(cancelBtn);
btnsLyt->addStretch();

setLayout(btnsLyt);
}

VerticalWindow::VerticalWindow(QWidget *parent) :
CropWindowComponents(parent)
{
QVBoxLayout *btnsLyt = new QVBoxLayout;
btnsLyt->setMargin(0);
btnsLyt->addWidget(changeBtn);
btnsLyt->addWidget(cropBtn);
btnsLyt->addWidget(continueBtn);
btnsLyt->addWidget(cancelBtn);
btnsLyt->addStretch();

setLayout(btnsLyt);
}

“imagecropperwindow.h”:

#include "imagecropwindow_p.h"

class ImageCropperWindow : public QWidget
{
Q_OBJECT
public:
explicit ImageCropperWindow(QWidget *parent = nullptr);

private slots:
void changeWindowOrientation();

private:
HorizontalWindow *horizWindow;
VerticalWindow *verticalWindow;
};

“imagecropperwindow.cpp”:

#include "imagecropperwindow.h"

#include <QDebug>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLabel>

ImageCropperWindow::ImageCropperWindow(QWidget *parent) : QWidget(parent)
{
horizWindow = new HorizontalWindow(this);
verticalWindow = new VerticalWindow(this);

connect(horizWindow->changeBtn, &QPushButton::clicked,
this, &ImageCropperWindow::changeWindowOrientation);
connect(verticalWindow->changeBtn, &QPushButton::clicked,
this, &ImageCropperWindow::changeWindowOrientation);

QVBoxLayout *layout = new QVBoxLayout(this);
layout->setMargin(3);
layout->addWidget(horizWindow);
layout->addWidget(verticalWindow);
verticalWindow->setVisible(false);

setLayout(layout);
}

void ImageCropperWindow::changeWindowOrientation()
{
if (horizWindow->isVisible()) {
horizWindow->setVisible(false);
verticalWindow->setVisible(true);
}
else {
verticalWindow->setVisible(false);
horizWindow->setVisible(true);
}

this->resize(this->minimumSizeHint());
}

“main.cpp”:

#include <QApplication>
#include <QDebug>
#include <QTranslator>

#include "imagecropperwindow.h"

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

QTranslator newLang;
newLang.load(":/translations/newLanguage.qm");

a.installTranslator(&newLang);

ImageCropperWindow w;
w.show();

return a.exec();
}

您可以找到整个项目 here .

PS:举个例子,我加了星号(*)作为新的翻译,比如

nativeLanuage  - ***newLanguage***  
Change - ***Change***
Crop - ***Crop***
Continue - ***Continue***
Cancel - ***Cancel***

最佳答案

QTranslator 使用 MOC 进行翻译,因此如果您希望翻译小部件,则应使用宏 Q_OBJECT,在你的情况下 CropWindowComponents 没有它,所以解决方案是添加它:

imagecropwindow_p.h

class CropWindowComponents: public QWidget
{
Q_OBJECT # <--- add this
public:
...

enter image description here

另一方面,不要将 .ts 添加到 .qrc,因为 .ts 仅用于将其转换为 .qm 二进制文件。当您将文件添加到 .qrc 时,它会被编译并添加到可执行文件中,从而增加最后一个文件的大小。因此,添加 .ts 会不必要地增加可执行文件的大小。

关于c++ - QTranslator:为什么app有些地方没有翻译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52585175/

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