Текстовое поле Imgui, отображаемое внутри QtVulkanWindowRenderer, не может использовать Windows IMEC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Текстовое поле Imgui, отображаемое внутри QtVulkanWindowRenderer, не может использовать Windows IME

Сообщение Anonymous »

Я создал настольное приложение Qt с QVulkanWindowRenderer и сделал появление текстового поля внутри окна рендеринга Vulkan с помощью Imgui. Я могу вводить его, как и ожидалось, на английском языке, но когда я пытаюсь переключить язык на панели задач Windows на корейский, язык не меняется на корейский на панели задач, если курсор сфокусирован на текстовом поле Imgui внутри средства визуализации Vulkan и символы появляются только на английском языке. В любом другом текстовом поле (текстовый редактор, браузер, даже текстовые поля Qt, которых нет в средстве визуализации Vulkan) изменение языка на панели задач работает правильно, и я могу печатать на корейском языке или, по крайней мере, символы будут отображаться как ?????? это означает, что входные данные Windows ime принимаются правильно, но в программе нет необходимых шрифтов для их отображения.
Я получаю входные данные с помощью eventFilter.

Код: Выделить всё

class MyVulkanRenderer : public QObject, public QVulkanWindowRenderer {
public:
MyVulkanRenderer(QVulkanWindow* w) : m_window(w) {
m_window->installEventFilter(this);
}
}
В переопределенной функции eventFilter у меня есть такой код, который собирает входные события и сопоставляет их с контекстом imgui.

Код: Выделить всё

 case QEvent::KeyPress:
case QEvent::KeyRelease: {
const bool down = event->type() == QEvent::KeyPress;
QKeyEvent* ke = static_cast(event);

if (down)
{
key_text.append(ke->text());
if (!key_text.isEmpty()) {
for (const QChar& c : key_text) {
ImWchar u = c.unicode();
if (u)
io.AddInputCharacter(u);
}
key_text.clear();
}
}

io.AddKeyEvent(qtKeyToImguiKey(Qt::Key(ke->key())), down);
Я думаю, проблема в том, что все события ввода проходят через QtVulkanWindowRenderer, и входные данные должны быть сопоставлены с функциями imgui, чтобы они имели какой-либо эффект, как здесь, когда я сопоставил событие нажатия клавиши с Qt на imgui. Чего я не понимаю, так это как сопоставить событие (если оно есть), когда пользователь нажимает кнопку языка на панели задач Windows, которая использует время Windows. Мне кажется, что кнопка не меняется при нажатии, потому что фокус находится на QVulkanWindowRenderer и никаких событий не запускается.
[img]https://i.sstatic. net/5SoRmaHO.png[/img]

переключение языка
[img]https://i .sstatic.net/nSsBApKP.png[/img]

Любая помощь или советы о том, как это решить, будем очень признательны.
Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/787 ... indows-ime
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»