如何将类似编辑器的Linux命令行嵌入到Qt应用程序中?

时间:2014-06-14 01:07:49

标签: qt

我之前使用过很酷的吉他标签应用程序,您可以使用键盘在字符网格中移动。您可以在任何字符单元格中放置任何数字。这是一张图片:

enter image description here

实际上,就像Linux控制台一样,你有一个光标块,你可以逐个字符地移动。

我使用Qt作为我的GUI应用程序。我如何在我的应用程序中添加这种类型的单字符编辑器控件?在我接触GUI编程时,我没有遇到过这种类型的小部件;因此,我甚至不确定该怎么称呼它或如何简洁地描述它。

感谢。

1 个答案:

答案 0 :(得分:1)

首先,您必须为按下/释放/保持时要响应的每个键实现处理程序。

小部件实现就像使用NavigatingEditing等状态实现有限状态机一样。

对于按下的每个键,您将相应地更新您的小部件或执行其他操作,包括更改小部件的状态。

在高级形式中,这将是:

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