基於here示例,我在輸入面板小部件中實現了虛擬鍵盤。我可以通過發送像emit characterGenerated(char)
這樣的信號在文本小部件中顯示字符 - 請參閱example中的buttonClicked(QWidget *w)
方法。不幸的是,這種方法不適用於輸入和退格鍵。我會很感激建議可能的解決方法。在Qt虛擬鍵盤上實現Backspace並輸入密鑰
如果很重要,我正在用C++進行開發。
基於here示例,我在輸入面板小部件中實現了虛擬鍵盤。我可以通過發送像emit characterGenerated(char)
這樣的信號在文本小部件中顯示字符 - 請參閱example中的buttonClicked(QWidget *w)
方法。不幸的是,這種方法不適用於輸入和退格鍵。我會很感激建議可能的解決方法。在Qt虛擬鍵盤上實現Backspace並輸入密鑰
如果很重要,我正在用C++進行開發。
考慮鏈接示例中的MyInputPanelContext::sendCharacter
函數。當構建QKeyEvent keyPress
對象時,將character.unicode()
用作第二個參數。但是,您也可以使用Qt::Key
值作爲第二個參數。例如:
QKeyEvent keyPress(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier);
你應該重寫這個方法來接受int
參數將被傳遞到QKeyEvent
構造和改變characterGenerated(QChar)
信號keyGenerated(int)
這樣你就可以發送一個特殊鍵(Qt::Key_Backspace
)或字符鍵(character.unicode()
)使用相同的信號和插槽。
這是一個特定的例子。我通過修改發送字符碼(在myinputpanelcontext.cpp中)來將'*'按鈕變回退格。請看一看。希望能幫助到你。
void MyInputPanelContext::sendCharacter(QChar character)
{
QPointer<QWidget> w = focusWidget();
if (!w)
return;
QKeyEvent keyPress(QEvent::KeyPress, character.unicode(), Qt::NoModifier, QString(character));
QKeyEvent keybkspc(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier);
if(character != '*')
{
QApplication::sendEvent(w, &keyPress);
}
else
{
QApplication::sendEvent(w, &keybkspc);
}
if (!w)
return;
QKeyEvent keyRelease(QEvent::KeyPress, character.unicode(), Qt::NoModifier, QString());
QApplication::sendEvent(w, &keyRelease);
}
謝謝。不幸的是,我不太清楚如何使這種技術適用於沒有Qt Key的歐元符號等字符。 – Olumide
我的解決方法基本上是測試字符,如果按下Enter或Backspace鍵,則用'Qt :: Key_Enter'或'Qt :: Key_Backspace'引發一個事件。否則用字符unicode信息引發一個事件。 – Olumide