Итак, коллеги, попробую подвести итоги. Не уверен, что это относится к Qt, но надеюсь, модератор меня не заплюсует.
1. Сделать ввод пароля с отображением маскирующих символов в консоли не получится. Точнее, не получится, если при вводе использовать управляющие символы. Напрример, клавиша bakspace или delete испортит всю картину.
2. Способы сокрытия вводимой информации из командной строки можно разделить на два вида.
Первый способ - выводить поверх эха какие-нибудь символы, например, пробелы. Это обеспечивается перемещением текстового курсора в консоли назад и вывода маскирующего символа.
С управлением положением курсором в консоли обстоит дело не лучше. Если в windows эту проблему можно как-то решить, то в linux вряд ли. Поэтому более или менее приемлемым вариантом остается вывод в стандартный поток символов возврата каретки \r или backspace \b.
Второй способ - подавление эхо-вывода. Т.е. перевод консоли в такой режим, при котором курсор стоит на месте, а в консоль ничего не печатается.
Оба способа платформо-зависимые.
Например, для того, чтобы после ввода каждого символа вернуть каретку назад, нужно использовать небуферизованный ввод с посимвольным чтением. В windows это сделать легко нестандартной функцией getch() из conio.h.
В linux ввод построчный. Т.е. функция getchar() читает стандартный ввод до тех пор, пока не будет нажата клавиша возврата каретки. Но можно перевести консоль в посимвольный режим ввода. Решение я увидел у Nixman:
http://www.cyberforum.ru/cpp-linux/thread162276.html#post931906.
Второй способ, на мой взгляд, проще, а потому красивее. Определяются две функции echo(bool) для windows и linux, управляющие включением/выключением эха:
http://www.cplusplus.com/forum/general/12256/. Далее ввод пароля делается просто:
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QTextStream in(stdin), out(stdout);
out << "Enter password:" << endl;
echo(false);
QString str=in.readLine();
echo(true);
out << endl << "Password: " << str << endl;
return 0;
}
Я лично буду использовать второй.
Если не последует возражений, то тему закрою.