有没有一种简单的方法来获取密钥的名称(比如从关键事件中的“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. 获取密钥
为什么不干脆让枚举代表的核心价值观? –