使用Qt应用程序翻译nativ OS fileDialog

时间:2018-02-19 08:53:00

标签: c++ qt qt5 translation qfiledialog

我想将使用本机操作系统组件的QfileDialog转换为与当前操作系统语言环境语言不同的特定语言。 QFileDialog::DontUseNativeDialog选项允许翻译Qt小部件,但它是一个旧的disigned,我不喜欢使用它,如果可能的其他解决方案。  我找到了以下内容:

   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") );

但这并没有翻译“取消”按钮。它只适用于“打开”和“文件名”标签。

有人可以告诉我如何修复“取消”按钮或者它有什么问题吗?

欢迎任何其他解决方案。

1 个答案:

答案 0 :(得分:1)

你没有做错任何事。它目前在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()或者其他东西来告诉我们,我们要做的事情毫无意义。

无论如何,这个bug已经很老了,它已被分配给一个Qt开发人员,它尚未关闭,但它的优先级较低。

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