我使用的是Qt 5.11。
我需要一键按下shift + 3
。但这个组合会生成特殊字符^
,因为我使用的是土耳其Q键盘。所以如果不再次按下shift + 3
,我就无法捕捉到它。
我尝试了换挡调节器和多按键解决方案,但没有成功。
我想覆盖^
。有什么可行的方法吗?
尝试以下操作即可。尽管根据文档,即使存在有效信息,nativeVirtualKey也可能返回0。所以不确定它是否一直有效。我用德语、英语和阿拉伯语键盘进行了测试。
更新(用土耳其键盘布局测试(
void keyPressEvent(QKeyEvent *ev)
{
if ((ev->nativeVirtualKey() == Qt::Key_3 || ev->key() == Qt::Key_3) && ev->modifiers() == Qt::ShiftModifier)
{
//Do something
}
}
对于土耳其式布局,^caret(一个死键(,除了上述之外,您还可以通过覆盖nativeEvent函数并手动调用keyEvent函数来捕捉死键按下
bool nativeEvent(const QByteArray & eventType, void * message, long * result)
{
MSG *msg = reinterpret_cast<MSG*>(message);
if (msg->message == WM_DEADCHAR)
{
QKeyEvent *key = new QKeyEvent(QEvent::KeyPress, Qt::Key_3, Qt::ShiftModifier);
}
}
一个小问题是,即使在另一种语言中按下^,keyEvent也会被调用,不一定只使用Shift+3,所以这是一种意外的行为,但对于您的情况,您可以告诉用户Shift+3或^都是特定功能的快捷方式