使用QT应用程序翻译本机OS FileDialog

translate a native OS fileDialog with Qt application

本文关键字:OS FileDialog 本机 翻译 QT 应用程序 使用      更新时间:2023-10-16

我想使用本机OS组件将我的qfiledialog转换为与当前OS语言语言不同的特定语言。

QFileDialog::DontUseNativeDialog选项允许翻译QT小部件,但这是一个旧的设计,如果可能的解决方案,我不喜欢使用它。

我找到了以下内容:

   QFileDialog d;
   d.setLabelText( QFileDialog::Accept,tr("Open") );
   d.setLabelText( QFileDialog::Reject,tr("Cancel") );
   d.setLabelText( QFileDialog::FileName,tr("File name") );
   d.setLabelText( QFileDialog::LookIn,tr("Look in") );

但这尚未翻译"取消"按钮。它仅适用于"开放"answers"文件名"标签。

有人可以告诉我如何为"取消"修复它。按钮或它有什么问题?

欢迎任何其他解决方案。

您没有做错任何事情。目前,它在QT中有些错误(BugTracker:QTBUG-44112(。问题是,QT使用Ifiledialog接口与本机OS文件对话框进行通信。该界面不允许更改拒绝按钮的标签。这是此本机对话框的QT代码处理标签:

void QWindowsNativeFileDialogBase::setLabelText(QFileDialogOptions::DialogLabel l, const QString &text)
{
  wchar_t *wText = const_cast<wchar_t *>(reinterpret_cast<const wchar_t *>(text.utf16()));
  switch (l) {
  case QFileDialogOptions::FileName:
    m_fileDialog->SetFileNameLabel(wText);
    break;
  case QFileDialogOptions::Accept:
    m_fileDialog->SetOkButtonLabel(wText);
    break;
  case QFileDialogOptions::LookIn:
  case QFileDialogOptions::Reject:
  case QFileDialogOptions::FileType:
  case QFileDialogOptions::DialogLabelCount:
    break;
  }
}
如您所见,试图设置拒绝按钮的标签(或其他选项(只是被忽略。老实说,这不是QT的最佳解决方案。他们至少可以实现Qwarning((或一些东西告诉我们,这是毫无意义的。

无论如何,此错误很旧,已分配给QT开发人员,尚未关闭,但优先级较低。

我知道,不是您想要的答案。