2013-02-08 15 views
5

Sto provando a visualizzare stringhe di lingua diverse nella mia app qt inserendo ciascuna lingua in un QMap<QString, QString> in modo che possa essere riutilizzato in più posizioni e inserito in diverse caselle combinate attraverso l'applicazione . Faccio questo creando il QMap in questo modo nel CTOR:I caratteri Unicode nell'app qt non vengono visualizzati

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

Ho poi inserirle nella casella combinata:

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

Durante l'esecuzione di applicazioni, compaiono i seguenti:

enter image description here

Tuttavia, se creo un file .ui separato e inserisco la mappa nello stesso modo, vedo quanto segue (anche se includo questo se parate Dialog class nella stessa applicazione), quindi chiaramente non ci sono problemi di font per quanto riguarda l'App non sapendo come renderizzare i diversi set di caratteri .... eppure non riesco a capire perché il primo non renderà i set di caratteri ?

Qualcuno può dirmi perché il primo non funziona, ma il secondo lo fa? Ho controllato Designer e il suo Locale è impostato su "C, Default" in entrambi i file ui che ho mostrato di seguito. Non riesco a capire quale altro sia la causa della differenza per il primo a non funzionare, e il secondo funziona all'interno della stessa applicazione.

Grazie per qualsiasi aiuto!

L'altra finestra di dialogo di prova:

enter image description here

risposta

1

Il vostro codice è corretto, ma il problema è che il file di origine non può contenere caratteri Unicode - a quanto pare sta usando la codifica diversa.

Salvare il file come UTF-8 e tutto dovrebbe funzionare!

enter image description here

+0

Credo che tutti i file siano salvati come UTF-8 in questo momento (anche se c'è un modo per controllare ogni file e come è già stato salvato?) In Creatore Qt -> Strumenti> Editor di testo le codifiche dei file sono impostate su UTF- 8 in questo momento. I file provenivano da svn da un progetto esistente, quindi non sono sicuro di come sono stati inizialmente salvati. Come posso convertirli in UTF-8 tramite la riga di comando (Unix)? – Tim

+0

Questo dovrebbe funzionare, ma non funziona su Ubuntu 12.04 apparentemente - 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 La tua versione Perl ha pulci # 37757 # 49830 Pronto! 326 ubu/home/tim/work/src/file GUI -i warning_accept_dialog.cpp warning_accept_dialog.cpp: text/x-c; charset = us-ascii non sembra cambiare. Ho provato diverse combo e ancora lo stesso risultato. – Tim

+1

In QtCreator ho provato Modifica-> Codifica selezionata-> Salva file. Ancora non si è presentato come utf8. Ho trovato che dovevo aggiungere un nuovo file, copiare/incollare il mio intero file ...e il nuovo file è stato salvato con la codifica utf8 e finalmente ha funzionato! – Tim

0

Nella prima schermata carattere utilizzato dal combobox è molto più grande rispetto alla seconda schermata. La mia ipotesi è che hai cambiato il carattere sia nella finestra di progettazione della GUI o nel codice e il secondo screenshot (di lavoro) sta usando il carattere predefinito. Potrebbe essere che quando hai cambiato la dimensione del carattere, hai anche cambiato il carattere in qualcosa che non contiene tutti i caratteri Unicode richiesti. Prova a cambiare il font usato dalla combobox in qualcos'altro.

Problemi correlati