use*_*186 4 c++ linux qt command-line-interface termios
我目前正在为linux设计CLI界面,由于各种原因,我无法使用ncurses.我只使用C++和Qt框架.
因此,为了拥有一个用户友好的界面,我必须在一个单独的线程中运行这个getch循环:
这基本上意味着我必须自己实现所有基本功能(例如退格).我已经实现了命令完成和命令历史记录(比如当你在linux中按tab或uparrow/downarrow时),但我无法弄清楚如何实现leftarrow/rightarrow(也就是通过typeahead寻找).
通常情况下,我这样实现:在每个不等于-1的gech上,我检查用户是否按下了一个特殊的键(一个以某种方式修改了typeahead的键).然后我使用以下函数清除stdout:
void inputobject::clear_line(int nletters)
{
QTextStream(stdout) << "\033[2K";
for(int i = 0; i < nletters;i++){
QTextStream(stdout) << "\b";
}
rewind(stdout);
}
Run Code Online (Sandbox Code Playgroud)
并用其他东西替换它,有效地模拟typeahead.例如,在退格的情况下,我会保存命令调用clear_line,并再次打印命令,只需少一个字母,行为与普通控制台应用程序完全相同.
我真正的问题是光标,在左/右箭头的情况下,我需要移动光标可视化,以便能够指示文本在用户寻找的位置:
由于我如何重写给定的stdout线以模拟typeahead的性质,光标REALLY的位置并不重要,只要它保持在同一条线上 - 它只是重要的视觉效果.如何在linux上实现移动光标可视化?
| 归档时间: |
|
| 查看次数: |
4726 次 |
| 最近记录: |