2013-02-08 27 views
5

Tôi đang cố gắng hiển thị các chuỗi ngôn ngữ khác nhau trong ứng dụng qt của mình bằng cách chèn từng ngôn ngữ vào QMap<QString, QString> để nó có thể được sử dụng lại ở một số nơi và đưa vào các Hộp tổ hợp khác nhau trong ứng dụng . Tôi làm điều này bằng tạo QMap như vậy trong ctor:Các ký tự Unicode trong ứng dụng qt không hiển thị

m_langMap.insert(QString::fromWCharArray(L"English"), "english"); 
m_langMap.insert(QString::fromWCharArray(L"Dansk"), "dansk"); 
m_langMap.insert(QString::fromWCharArray(L"Nederlands"), "dutch"); 
m_langMap.insert(QString::fromWCharArray(L"Čeština"), "czeck"); 
m_langMap.insert(QString::fromWCharArray(L"Slovenský"), "slovak"); 
m_langMap.insert(QString::fromWCharArray(L"Magyar"), "hungarian"); 
m_langMap.insert(QString::fromWCharArray(L"Român"), "romanian"); 
m_langMap.insert(QString::fromWCharArray(L"Latviešu"), "latvian"); 
m_langMap.insert(QString::fromWCharArray(L"Lietuvių"), "lithuanian"); 
m_langMap.insert(QString::fromWCharArray(L"Polski"), "polish"); 
m_langMap.insert(QString::fromWCharArray(L"Português"), "portuguese"); 
m_langMap.insert(QString::fromWCharArray(L"Español"), "spanish"); 
m_langMap.insert(QString::fromWCharArray(L"Français"), "french"); 
m_langMap.insert(QString::fromWCharArray(L"Italiano"), "italian"); 
m_langMap.insert(QString::fromWCharArray(L"Svenska"), "swedish"); 
m_langMap.insert(QString::fromWCharArray(L"Русский"), "russian"); 
m_langMap.insert(QString::fromWCharArray(L"Українська"), "ukranian"); 
m_langMap.insert(QString::fromWCharArray(L"Русский"), "russian"); 
m_langMap.insert(QString::fromWCharArray(L"中文"), "chinese"); 
m_langMap.insert(QString::fromWCharArray(L"日本語"), "japanese"); 

sau đó tôi chèn chúng vào combo box:

QMap<QString, QString>::const_iterator it = m_langMap.begin(); 
while (it != m_langMap.end()) 
{ 
    ui->comboBox->addItem(it.key()); 
    ++it; 
} 

Khi chạy ứng dụng, tôi thấy như sau:

enter image description here

Tuy nhiên, nếu tôi tạo tệp .ui riêng và chèn bản đồ theo cùng một cách, tôi thấy như sau (ngay cả khi tôi bao gồm điều này Parate Dialog class vào cùng một ứng dụng), vì vậy rõ ràng không có vấn đề về font nào mà App không biết cách render các bộ ký tự khác nhau .... nhưng tôi không thể hiểu tại sao cái đầu tiên sẽ không render bộ ký tự ?

Ai đó có thể cho tôi biết lý do tại sao lần đầu tiên không hoạt động nhưng thứ hai không hoạt động? Tôi đã kiểm tra Nhà thiết kế và Miền địa phương của nó được đặt thành 'C, Mặc định' trong cả hai tệp ui tôi đã hiển thị bên dưới. Tôi dường như không thể tìm ra điều gì khác đang gây ra sự khác biệt cho người đầu tiên không làm việc, và thứ hai không hoạt động trong cùng một ứng dụng.

Cảm ơn bạn đã trợ giúp!

Các thử nghiệm Dialog khác:

enter image description here

Trả lời

1

Mã của bạn là đúng, nhưng vấn đề là file nguồn của bạn không thể chứa các ký tự Unicode - dường như nó đang sử dụng mã hóa khác nhau.

Lưu tệp dưới dạng UTF-8 và mọi thứ sẽ hoạt động!

enter image description here

+0

Tôi tin rằng tất cả các tệp được lưu dưới dạng UTF-8 ngay bây giờ (mặc dù có cách kiểm tra từng tệp và cách lưu tệp đó chưa?) Trong Công cụ tạo> Công cụ> Trình chỉnh sửa văn bản mã hóa tệp được đặt thành UTF- 8 ngay bây giờ. Các tệp đến từ svn từ một dự án hiện có, vì vậy tôi không chắc chắn về cách chúng được lưu ban đầu. Làm thế nào tôi có thể chuyển đổi chúng sang UTF-8 thông qua dòng lệnh (Unix)? – Tim

+0

Đây là nghĩa vụ phải làm việc, tuy nhiên nó không hoạt động trên Ubuntu 12.04 rõ ràng - file -i warning_accept_dialog.cpp warning_accept_dialog.cpp: text/x-c; charset = us-ascii 325 ubu/home/tim/work/src/GUI convmv --notest -fus-ascii -tutf8 warning_accept_dialog.cpp Phiên bản Perl của bạn có bọ chét # 37757 # 49830 Sẵn sàng! 326 ubu/home/tim/work/src/GUI file -i warning_accept_dialog.cpp warning_accept_dialog.cpp: text/x-c; charset = us-ascii dường như không thay đổi. Ive đã thử một số combo và vẫn là kết quả tương tự. – Tim

+1

Trong QtCreator tôi đã thử Edit-> Selected Encoding-> Save File. Vẫn không hiển thị như utf8. Tôi thấy rằng tôi phải thêm tệp mới, sao chép/dán toàn bộ tệp của mình ...và tệp mới đã được lưu dưới mã hóa utf8 và cuối cùng nó đã hoạt động! – Tim

0

Trong ảnh chụp màn hình đầu tiên trên phông chữ được sử dụng bởi các combobox là lớn hơn nhiều so với trong ảnh chụp màn hình thứ hai. Tôi đoán là bạn đã thay đổi phông chữ trong trình thiết kế GUI hoặc trong mã và ảnh chụp màn hình thứ hai (đang hoạt động) đang sử dụng phông chữ mặc định. Nó có thể là khi bạn đã thay đổi kích thước phông chữ, bạn cũng đã thay đổi phông chữ thành một thứ không chứa tất cả các ký tự Unicode bắt buộc. Hãy thử thay đổi phông chữ được sử dụng bởi combobox để cái gì khác.

Các vấn đề liên quan