【问题标题】:How to convert `extern int getchar (void);` from stdio.h to Qt::Key?如何将“extern int getchar (void);”从 stdio.h 转换为 Qt::Key?
【发布时间】:2018-12-06 20:14:11
【问题描述】:

基本上我想要实现的是

void getCharSlot(int ch)
{
    switch (ch) {
    case Qt::Key_Escape:{dostuff();}
    case Qt::Key_Tab:   {dostuff();}
    }
}

有没有比较方便的方法呢?

【问题讨论】:

  • Qt::Key_Escape 对应什么字符?
  • Key_Escape 不适合 charchar 包含什么?
  • 如何获取c的值?,我想你有一个XY problem
  • getchar() 返回输入的内容,而不是按下的键。这是两件不同的事情。 (班次、大写等)
  • @Akiva 不幸的是,您必须这样做,这两个值之间没有对应关系。 :-)

标签: c++ qt char keypress getchar


【解决方案1】:

这个问题实际上几乎可以回答自己。我最初发布它时没有意识到

extern int getchar (void);

来自stdio.h 的类型int 从我复制的代码中转换为char

删除该转换并将整数直接发送到下面的函数后,它可以正常工作:

void Foo::bar(int ch)
{
    const QMetaEnum &keyEnum = QMetaEnum::fromType<Qt::Key>();
    QTextStream(stdout) << keyEnum.valueToKey(ch) << endl;
}

这意味着ch 将适用于枚举的 switch 语句。

【讨论】:

  • 这适用于某些字符,但不适用于所有字符。 Windows 键与 Qt 键相同!可悲的是,没有简单的方法来映射它们
  • @Felix All 对我有用,我使用高度定制的键盘布局,其中几乎每个最后一个字符都重新排列并使用不同的修饰符。但是我不使用 Windows(我也不会在意),但我很好奇你是否真的尝试过这个?
  • 简单示例:字符 e 不会映射到 Qt::Key_E - 只有大写字母 E 会。这适用于所有小写字符,还有更多。它可能适用于某些人,但不适用于所有人
猜你喜欢
  • 1970-01-01
  • 2019-11-19
  • 2021-09-06
  • 2013-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
相关资源
最近更新 更多