2016-03-31 20 views
3

ile metin yazarken metin girişi için OSX üzerinde bir InputWindow getiriliyor C++ motoru ve UI için Qt ile yazılmış bir metin editörü üzerinde çalışıyorum. Kullanıcının herhangi bir giriş kaynağından (herhangi bir dilin klavyesi) yazmasına izin vermek istiyorum. 1-1 klavye eşlemesi olan dilleri desteklediğim zamana kadar iyiydi (ör. Fransızca/Rusça klavye). Ben metninin oluşturulmasında ve QEvent::InputMethodAsya laguage

klavye girişlerini yakalama hangi bir eventFilter benim Qwidget yüklü vardı Ama bütün özelliklerini desteklemek mümkün değilim (Çince/Japonca gibi) Asya dilleri ile başladı Bu tür bir metin ile metin düzenleme için gerekli olan, böyle bir durumun tipik bir örneği, kullanıcı Japonca (Hiragana IME) ile bir metin yazdığında ve kullanıcının tüm karakterlerin tahmin edilen içeriğin yerine ne ile değiştirileceğini belirlemesine yardımcı olan boşluk tuşuna basıldığında bölünmüş alt çizgidir. dialog.Daha aşağıdaki resim: some text written on TextEdit application with Japanese Input Method(Hiragana), notice the split underlines coming up when user hits a spacebar,:

Bir süre uğraştıktan sonra Qt'nin bölünmeler veya dizginin uzunluğu hakkında yeterli bilgi sağlamadığını anladım. değiştiriliyor ve tüm bu görsel görünüşü kendim yaratma fikrinden vazgeçiyorum.

Ancak, bazı uygulamaların, bu karmaşık metinleri işlemek için bazı OS'ye özgü girdi yöntemi kullandığını keşfettim. Bir örnek OSX Finder, eğer giriş yöntemini Japonca (Hiragana) olarak değiştirirsek ve bir bulucu penceresi odakta olduğunda yazmaya başladığında, tüm girişlerimi kabul eden ve bulucuya ileten bir pencere açar. Daha kazmak enter image description here

aşağıdaki resme bakın ve benim için çok kolay bu hile yapmış olabilir belgeler ("http://mirror.informatimago.com/next/developer.apple.com/technotes/te/te_27.html#Downloads") bir sürü daha erken Metin Hizmetleri Müdürü olarak sunulmuştu böyle bir çerçeve olduğunu anladım AMA bu API kullanımdan kaldırıldı ve artık mevcut değil.

Şu an için arıyorum, bu kullanımdan kaldırılan API için bir alternatiftir. Herhangi bir kuruluş, kolay metin girişi için bu işletim sistemi giriş yöntemi bileşenini getirmeme yardımcı olabilecek bir kakao API'mız olup olmadığını biliyor mu?

Her türlü yardım/öneriniz açıktır.

+0

'QInputMethod' ve ilgili sınıflar bununla ilgili yardımcı olur. –

cevap

3

Tamam, çözümü buldum. Qt'nin bu bölünmeler hakkında yeterli bilgi sağlamadığını söylemek beni cahildi. Qt'nin bu desteği sağlama pozisyonunu kullanarak bir yolu vardır. Yani sonuçlandırmak, görüntülenecek metnin bilgileri kolayca tarafından alınabilir: Burada

for(auto value : inEvent->attributes()) 
    { 
     if(value.type == QInputMethodEvent::Cursor) 
     { 
      std::cout<<" length "<< value.length; 
      std::cout<<" start "<< value.start; 
     } 
    } 

, başlangıç ​​imlecin pozisyonudur. Bu konum açık olduğunda, kullanıcıya net bir işaret vermek için metnin ne kadar uzunluğunun altı çizileceğini belirlemek kolaydır.