Мне было интересно, если это возможно, чтобы собрать пользовательский ввод с помощью qDebug()
утверждение в Qt C ++.
Я пытался сделать это, как в коде std C ++, как:
qDebug() >> myvar;
но это не сработало.
Как я могу читать с stdin
используя Qt?
qDebug
используется для вывода stderr
, Если вы хотите читать с stdin
используя Qt, вы должны использовать QTextStream
:
#include <stdio.h>
QTextStream in(stdin);
QString line;
in >> line;
Нет, это невозможно. QDebug обеспечивает только выходной поток для отладочной информации.
Так как вы хотите использовать QDebug, Я предполагаю, что ввод может быть для целей отладки. В этом случае, если это приложение с графическим интерфейсом, вы можете рассмотреть возможность использования QInputDialog запустить модальное диалоговое окно, чтобы получить ввод. У него есть несколько удобных статических методов, но, например, чтобы получить строку, вы можете сделать это:
qDebug() << "before debug input dialog";
QString debugText = QInputDialog::getText(NULL, "Input debug text", "Your input:");
qDebug() << "got text" << debugText;
Разница с этим, и просто чтение из STDIN то есть, это не заблокирует весь цикл событий (это отключит графический интерфейс обычным модальным диалоговым способом). Напротив, простое чтение из STDIN заблокирует весь цикл событий. Вне зависимости от того, что еще происходит в цикле событий (например, сетевой материал), это не имеет значения в ситуации отладки, или, если вы конкретно хотите одно или другое, зависит от того, что еще происходит. Однако, если вы используете STDIN для других целей этот диалог может быть очень удобным.
qDebug
и друзья пишут текст в соответствующее место. Это может быть stderr, но это может быть и системный журнал. Таким образом, не все места, где qDebug
пишет даже для поддержки пользовательского ввода. Но даже если бы они: Как мог Qt определить, должен ли пользовательский ввод идти в qDebug
, qWarning
или один из других? Это невозможно.