我之前使用过很酷的吉他标签应用程序,您可以使用键盘在字符网格中移动。您可以在任何字符单元格中放置任何数字。这是一张图片:
实际上,就像Linux控制台一样,你有一个光标块,你可以逐个字符地移动。
我使用Qt作为我的GUI应用程序。我如何在我的应用程序中添加这种类型的单字符编辑器控件?在我接触GUI编程时,我没有遇到过这种类型的小部件;因此,我甚至不确定该怎么称呼它或如何简洁地描述它。
感谢。
答案 0 :(得分:1)
首先,您必须为按下/释放/保持时要响应的每个键实现处理程序。
小部件实现就像使用Navigating
和Editing
等状态实现有限状态机一样。
对于按下的每个键,您将相应地更新您的小部件或执行其他操作,包括更改小部件的状态。
在高级形式中,这将是:
void MyCrazyWidget::on_keyDown(QKeyEvent event) {
switch ( this->state() ) {
case State::Navigating:
this->navigatingStateHandleKeyDown(event);
break;
case State::Editing:
this->editingStateHandleKeyDown(event);
break;
default:
// waaaat???
}
}
void MyCrazyWidget::navigatingStateHandleKeyDown(QKeyEvent event) {
switch ( event.key() ) {
// handle each of the keys here (or simply ignore those without an action).
}
}
void MyCrazyWidget::editingStateHandleKeyDown(QKeyEvent event) {
switch ( event.key() ) {
// handle each of the keys here (or simply ignore those without an action).
}
}
这显然是非常高的水平,但几乎是处理这些事情(afaik)。这是一项无聊而艰苦的工作,但我们真的需要我们的编辑; D