有沒有一種簡單的方法來獲取密鑰的名稱(比如從關鍵事件中的「uparrow」,而不是獲取密鑰代碼「16777235」)?我必須自己製作關鍵字名單嗎?從QKeyEvent獲取密鑰的名稱Qt
回答
在你的代碼
使用人類可讀的名稱可以使用Qt::Key枚舉,或拿到鑰匙與QKeyEvent::text()字符串。
INT QKeyEvent ::鍵()const的
返回按下或釋放的鍵的代碼。
請參閱Qt :: Key獲取鍵盤代碼列表。這些代碼獨立於底層窗口系統。請注意,該函數不區分大小寫字母,爲此使用text()函數(返回生成密鑰的Unicode文本)。
...
Qt::Key是映射數字鍵ID的枚舉(如QKeyEvent的返回值::鍵()),以程序員可讀名稱,如Qt::Key_Up
。
如果你只關心字母數字鍵,也可以使用QKeyEvent::text()來獲取值:
的QString QKeyEvent ::文本()const的
返回生成該鍵的Unicode文本。在按下或釋放諸如Shift,Control,Alt和Meta等修飾鍵時,返回的文本可以是空字符串。在這種情況下,key()將包含一個有效值。
另請參見Qt :: WA_KeyCompression。
顯示人類可讀的名字給用戶
使用QKeySequence::toString()或建立自己的「好」的名稱表。
要讓用戶可讀的密鑰名稱向用戶顯示的最簡單方法是使用QKeySequence::toString()。
下面是一個例子:
Qt::Key key = Qt::Key_Up;
qDebug() << QKeySequence(key).toString(); // prints "Up"
如果你不喜歡QKeySequence使用的名稱(例如,你想使用「向上箭頭」,而不是「向上」),你需要讓你的數據表將枚舉值重新映射到您的首選名稱。
謝謝,QKeySequence :: toString正是我所需要的。 – Ben
另一種更通用的方法是利用Qt元對象系統和內省對Qt命名空間中的大多數枚舉進行反省。這適用於Qt 4和Qt 5。
#include <QMetaEnum>
class KeyHelper : private QObject {
public:
static QString keyName(int index) {
static int keyEnumIndex = staticQtMetaObject.indexOfEnumerator("Key");
QString name = staticQtMetaObject.enumerator(keyEnumIndex).valueToKey(index);
if (index >= Qt::Key_Left && index <= Qt::Key_Down) name += " Arrow";
return name.isEmpty() ? QString() : name.mid(4);
}
};
int main()
{
Q_ASSERT(KeyHelper::keyName(Qt::Key_Tab) == "Tab");
Q_ASSERT(KeyHelper::keyName(Qt::Key_Up) == "Up Arrow");
}
,那麼你會用它,也就是說,keyPressEvent
如下:
void MyWidget::keyPressEvent(QKeyEvent * ev) {
qDebug() << KeyHelper::keyName(ev->key());
}
這正是我所需要的 – Jared
- 1. 獲取JSON密鑰名稱
- 2. 如何獲取子密鑰的名稱?
- 3. 如何獲取PyWin32中提供密鑰的密鑰名稱?
- 4. Obj-C獲取JSON密鑰名稱
- 5. Javascript獲取對象密鑰名稱
- 6. 使用列名稱或對稱密鑰獲取證書名稱
- 7. 使用密鑰的名稱從數組中獲取值
- 8. 如何從數據屬性獲取數據密鑰名稱?
- 9. 使用密鑰名稱從關聯數組中獲取值
- 10. 使用jQuery從HTML元素名稱獲取密鑰
- 11. Java:從編碼密鑰獲取密鑰
- 12. JSON密鑰名稱?
- 13. 如何通過提供密鑰名稱來獲取密鑰的特定值?
- 14. 如何獲得密鑰名稱id Id
- 15. 從Multiindex中獲取密鑰?
- 16. 從JTextArea獲取密鑰
- 17. 從密鑰獲取字符
- 18. 從模板獲取密鑰
- 19. 從EVP_CIPHER_CTX獲取AES密鑰
- 20. 從密鑰獲取值PHP
- 21. 從IgniteCache獲取密鑰
- 22. 從Object.create獲取密鑰
- 23. 通過密鑰名稱從字典中刪除密鑰
- 24. 使用JQ獲取所有唯一的JSON密鑰名稱
- 25. CM_Get_DevNode_Property_Keys有沒有辦法獲取密鑰的名稱
- 26. 如何獲取PFX密鑰的容器名稱?
- 27. Angular 4 * ngFor,ngx-pipes獲取頂級密鑰的名稱
- 28. 從密鑰容器導出強名稱
- 29. 只用一個密鑰在密鑰中查找密鑰名稱?
- 30. 獲取密鑰
爲什麼不乾脆讓枚舉代表的核心價值觀? –