簡體   English   中英

使用 Qt 應用程序翻譯原生操作系統文件對話框

[英]translate a nativ OS fileDialog with Qt application

我想使用本機操作系統組件將我的 QfileDialog 翻譯成與當前操作系統語言環境不同的特定語言。 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") );

但這並沒有翻譯“取消”按鈕。 它僅適用於“打開”和“文件名”標簽。

有人可以告訴我如何修復“取消”按鈕或它有什么問題嗎?

歡迎任何其他解決方案。

你沒有做錯任何事。 它目前是 Qt 中的一個錯誤(錯誤跟蹤器: 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開發者了,還沒有關閉,但是優先級不高。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM