에 대한 번역을 사용 중입니다. QAction 개체에서 만든 메뉴가있는 시스템 트레이 응용 프로그램의 번역과 관련하여 문제가 있습니다. QAction 개체는 주 응용 프로그램 상태 (잘못된 로그인 자격 증명 ... 등)에 따라 다른 텍스트 만 표시하므로이 텍스트는 응용 프로그램 수명주기 동안 변경됩니다. 문제는 주어진 시간 (사용자가 GUI에서 언어를 변경할 때)에 텍스트에 대해 동적 번역을 사용하는 방법입니다. 언어 변경을위한 송수신 메커니즘이 갖추어져 있고 새 변환기의로드가 sys tray 응용 프로그램에서 만들어집니다. GUI는 GUI 응용 프로그램에서 만들어지고 번역 이벤트를 기반으로 잡아서 동적으로 수행됩니다.시스템 트레이 및 QAction (QT)
ENSURE(connect(this, SIGNAL(changeLangInTray()), &m_tray, SLOT(_ChangeLanguage())));
그리고 _ChangeLanguage 방법은 객체를의에 대한 트레이에서 번역을 수행해야합니다 여기
void Application::_SetLanguage(QString language)
{
QTranslator *qtTranslator = new QTranslator();
if (qtTranslator->load("qt_" + language, m_sExecutableDir + "/lang")) {
if (m_qtTranslator) {
removeTranslator(m_qtTranslator);
delete m_qtTranslator;
}
m_qtTranslator = qtTranslator;
installTranslator(qtTranslator);
}
QTranslator *trayTranslator = new QTranslator();
if (trayTranslator->load("ff_" + language, m_sExecutableDir + "/lang")) {
if (m_appTranslator) {
removeTranslator(m_appTranslator);
delete m_appTranslator;
// _restartApp();
}
m_appTranslator = trayTranslator;
installTranslator(trayTranslator);
}
emit changeLangInTray();
}
가 신호에 대한 코드입니다 :
이
은 번역자의 로딩 코드 :QMenu m_trayMenu;
QSystemTrayIcon m_trayIcon;
QAction* m_pOpenGuiAction;
.................
어떤 도움을 주셔서 감사합니다.
당신은에 의해 응용 프로그램 개체에 번역기를 설치할 수 있습니다
이것은 GUI 부분에 사용 된 것이지만 시스템 트레이 응용 프로그램에 대해서는 이와 같은 것이 없습니다. 여기에는 retranslateUi 메소드를 찾을 수있는 UI가 없습니다. + 트레이 응용 프로그램이 QWidget에서 상속받지 않습니다. 각 QAction이 새로운로드 된 사전을 강제로 사용할 수 있습니까? – Bogdan
@Bogdan 'QCoreApplication :: translate'를 사용하여 액션의 번역 텍스트를 반환하고 텍스트를 설정할 수 있습니다. 답변을 업데이트했습니다. – Nejat
그들은 그것을 사용하고 있지만 새 번역기를로드 한 후에는 응용 프로그램을 시작할 때까지 언어가 변경되지 않습니다. (보통의 qtTranslator를로드합니다) 'status_str = QCoreApplication :: translate ("TrayMenu", "Account : 로그인하지 않았습니다");' – Bogdan